diff options
author | Matthew Newhook <matthew@zeroc.com> | 2015-03-21 15:35:40 -0230 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2015-03-21 15:35:40 -0230 |
commit | 630a37d2fe66f24518299e705f958b571803c522 (patch) | |
tree | 969723791bdc4d73bb099c19d45554d0ca241ad9 /python/modules/IcePy/Init.cpp | |
parent | Fix some README.md markdown formatting (diff) | |
download | ice-630a37d2fe66f24518299e705f958b571803c522.tar.bz2 ice-630a37d2fe66f24518299e705f958b571803c522.tar.xz ice-630a37d2fe66f24518299e705f958b571803c522.zip |
py -> python
rb -> ruby
objc -> objective-c
cs -> csharp
Diffstat (limited to 'python/modules/IcePy/Init.cpp')
-rw-r--r-- | python/modules/IcePy/Init.cpp | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/python/modules/IcePy/Init.cpp b/python/modules/IcePy/Init.cpp new file mode 100644 index 00000000000..4de906407c4 --- /dev/null +++ b/python/modules/IcePy/Init.cpp @@ -0,0 +1,244 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifdef _WIN32 +# include <IceUtil/Config.h> +#endif +#include <BatchRequestInterceptor.h> +#include <Communicator.h> +#include <Connection.h> +#include <ConnectionInfo.h> +#include <Current.h> +#include <Endpoint.h> +#include <EndpointInfo.h> +#include <ImplicitContext.h> +#include <Logger.h> +#include <ObjectAdapter.h> +#include <Operation.h> +#include <Properties.h> +#include <PropertiesAdmin.h> +#include <Proxy.h> +#include <Slice.h> +#include <Types.h> +#include <Ice/Initialize.h> + +using namespace std; +using namespace IcePy; + +extern "C" PyObject* IcePy_cleanup(PyObject*); + +static PyMethodDef methods[] = +{ + { STRCAST("stringVersion"), reinterpret_cast<PyCFunction>(IcePy_stringVersion), METH_NOARGS, + PyDoc_STR(STRCAST("stringVersion() -> string")) }, + { STRCAST("intVersion"), reinterpret_cast<PyCFunction>(IcePy_intVersion), METH_NOARGS, + PyDoc_STR(STRCAST("intVersion() -> int")) }, + { STRCAST("currentProtocol"), reinterpret_cast<PyCFunction>(IcePy_currentProtocol), METH_NOARGS, + PyDoc_STR(STRCAST("currentProtocol() -> Ice.ProtocolVersion")) }, + { STRCAST("currentProtocolEncoding"), reinterpret_cast<PyCFunction>(IcePy_currentProtocolEncoding), METH_NOARGS, + PyDoc_STR(STRCAST("currentProtocolEncoding() -> Ice.EncodingVersion")) }, + { STRCAST("currentEncoding"), reinterpret_cast<PyCFunction>(IcePy_currentEncoding), METH_NOARGS, + PyDoc_STR(STRCAST("currentEncoding() -> Ice.EncodingVersion")) }, + { STRCAST("stringToProtocolVersion"), reinterpret_cast<PyCFunction>(IcePy_stringToProtocolVersion), METH_VARARGS, + PyDoc_STR(STRCAST("stringToProtocolVersion(str) -> Ice.ProtocolVersion")) }, + { STRCAST("protocolVersionToString"), reinterpret_cast<PyCFunction>(IcePy_protocolVersionToString), METH_VARARGS, + PyDoc_STR(STRCAST("protocolVersionToString(Ice.ProtocolVersion) -> string")) }, + { STRCAST("stringToEncodingVersion"), reinterpret_cast<PyCFunction>(IcePy_stringToEncodingVersion), METH_VARARGS, + PyDoc_STR(STRCAST("stringToEncodingVersion(str) -> Ice.EncodingVersion")) }, + { STRCAST("encodingVersionToString"), reinterpret_cast<PyCFunction>(IcePy_encodingVersionToString), METH_VARARGS, + PyDoc_STR(STRCAST("encodingVersionToString(Ice.EncodingVersion) -> string")) }, + { STRCAST("generateUUID"), reinterpret_cast<PyCFunction>(IcePy_generateUUID), METH_NOARGS, + PyDoc_STR(STRCAST("generateUUID() -> string")) }, + { STRCAST("createProperties"), reinterpret_cast<PyCFunction>(IcePy_createProperties), METH_VARARGS, + PyDoc_STR(STRCAST("createProperties([args]) -> Ice.Properties")) }, + { STRCAST("getProcessLogger"), reinterpret_cast<PyCFunction>(IcePy_getProcessLogger), METH_NOARGS, + PyDoc_STR(STRCAST("getProcessLogger() -> Ice.Logger")) }, + { STRCAST("setProcessLogger"), reinterpret_cast<PyCFunction>(IcePy_setProcessLogger), METH_VARARGS, + PyDoc_STR(STRCAST("setProcessLogger(logger) -> None")) }, + { STRCAST("defineEnum"), reinterpret_cast<PyCFunction>(IcePy_defineEnum), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineStruct"), reinterpret_cast<PyCFunction>(IcePy_defineStruct), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineSequence"), reinterpret_cast<PyCFunction>(IcePy_defineSequence), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineCustom"), reinterpret_cast<PyCFunction>(IcePy_defineCustom), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineDictionary"), reinterpret_cast<PyCFunction>(IcePy_defineDictionary), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("declareProxy"), reinterpret_cast<PyCFunction>(IcePy_declareProxy), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineProxy"), reinterpret_cast<PyCFunction>(IcePy_defineProxy), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("declareClass"), reinterpret_cast<PyCFunction>(IcePy_declareClass), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineClass"), reinterpret_cast<PyCFunction>(IcePy_defineClass), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("defineException"), reinterpret_cast<PyCFunction>(IcePy_defineException), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("stringify"), reinterpret_cast<PyCFunction>(IcePy_stringify), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("stringifyException"), reinterpret_cast<PyCFunction>(IcePy_stringifyException), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("loadSlice"), reinterpret_cast<PyCFunction>(IcePy_loadSlice), METH_VARARGS, + PyDoc_STR(STRCAST("loadSlice(cmd) -> None")) }, + { STRCAST("cleanup"), reinterpret_cast<PyCFunction>(IcePy_cleanup), METH_NOARGS, + PyDoc_STR(STRCAST("internal function")) }, + { STRCAST("compile"), reinterpret_cast<PyCFunction>(IcePy_compile), METH_VARARGS, + PyDoc_STR(STRCAST("internal function")) }, + { 0, 0 } /* sentinel */ +}; + +#if PY_VERSION_HEX >= 0x03000000 + +# define INIT_RETURN return(0) + +static struct PyModuleDef iceModule = +{ + PyModuleDef_HEAD_INIT, + "IcePy", + "The Internet Communications Engine.", + -1, + methods, + NULL, + NULL, + NULL, + NULL +}; + +#else + +# define INIT_RETURN return + +PyDoc_STRVAR(moduleDoc, "The Internet Communications Engine."); + +#endif + +#ifdef ICE_STATIC_LIBS +extern "C" +{ +Ice::Plugin* createIceSSL(const Ice::CommunicatorPtr&, const std::string&, const Ice::StringSeq&); +Ice::Plugin* createIceDiscovery(const Ice::CommunicatorPtr&, const string&, const Ice::StringSeq&); +Ice::Plugin* createIceLocatorDiscovery(const Ice::CommunicatorPtr&, const string&, const Ice::StringSeq&); +} +#endif + +PyMODINIT_FUNC +#ifndef _WIN32 // On Windows, PyMODINIT_FUNC already defines dllexport +ICE_DECLSPEC_EXPORT +#endif +#if PY_VERSION_HEX >= 0x03000000 +PyInit_IcePy(void) +#else +initIcePy(void) +#endif +{ + PyObject* module; + +#ifdef ICE_STATIC_LIBS + // Register the plugins manually if we're building with static libraries. + Ice::registerPluginFactory("IceSSL", createIceSSL, false); + Ice::registerPluginFactory("IceDiscovery", createIceDiscovery, false); + Ice::registerPluginFactory("IceLocatorDiscovery", createIceLocatorDiscovery, false); +#endif + + // + // Notify Python that we are a multi-threaded extension. + // + PyEval_InitThreads(); + +#if PY_VERSION_HEX >= 0x03000000 + // + // Create the module. + // + module = PyModule_Create(&iceModule); +#else + // + // Initialize the module. + // + module = Py_InitModule3(STRCAST("IcePy"), methods, moduleDoc); +#endif + + // + // Install built-in Ice types. + // + if(!initProxy(module)) + { + INIT_RETURN; + } + if(!initTypes(module)) + { + INIT_RETURN; + } + if(!initProperties(module)) + { + INIT_RETURN; + } + if(!initPropertiesAdmin(module)) + { + INIT_RETURN; + } + if(!initBatchRequest(module)) + { + INIT_RETURN; + } + if(!initCommunicator(module)) + { + INIT_RETURN; + } + if(!initCurrent(module)) + { + INIT_RETURN; + } + if(!initObjectAdapter(module)) + { + INIT_RETURN; + } + if(!initOperation(module)) + { + INIT_RETURN; + } + if(!initLogger(module)) + { + INIT_RETURN; + } + if(!initConnection(module)) + { + INIT_RETURN; + } + if(!initConnectionInfo(module)) + { + INIT_RETURN; + } + if(!initImplicitContext(module)) + { + INIT_RETURN; + } + if(!initEndpoint(module)) + { + INIT_RETURN; + } + if(!initEndpointInfo(module)) + { + INIT_RETURN; + } + +#if PY_VERSION_HEX >= 0x03000000 + return module; +#endif +} + +extern "C" +PyObject* +IcePy_cleanup(PyObject* /*self*/) +{ + cleanupLogger(); + + Py_INCREF(Py_None); + return Py_None; +} |