Beispiel #1
0
 def __init__(self, entityId=None):
     super(ClientEntity, self).__init__()
     self.logger = LogManager.getLogger('ClientEntity.%s' % self.__class__.__name__)
     self.logger.info('ClientEntity.__init__')
     self.eid = (entityId is None) and IdCreator.genId() or entityId
     EntityManager.addEntity(self.eid, self, False)
     self.server = None
Beispiel #2
0
 def __init__(self, stub, encoder, proto='BSON'):
     super(ServerProxy, self).__init__()
     self.stub = stub
     stub.rpcChannel.regListener(self)
     self.owner = None
     self.logger = LogManager.getLogger('Client.ServerProxy')
     self.encoder = encoder
     self.proto = proto
Beispiel #3
0
 def __init__(self, connector, encrypter=None, decrypter=None, compressor=None):
     # 需要处理onRead和onDisconnected回调
     self.connector = connector
     self.channelObj = connector.getChannelObj()
     connector.setChannelObj(self)
     self.encrypter = encrypter
     self.decrypter = decrypter
     self.compressor = compressor
     self.logger = LogManager.getLogger('MarsRpc.CryptCompressConnector')
Beispiel #4
0
 def __init__(self, stub, encoder, proto='BSON'):
     super(CachedServerProxy, self).__init__()
     self.logger = LogManager.getLogger('Client.CachedServerProxy')
     self.stub = None
     self.owner = None
     self.encoder = encoder
     self.reliableMsgCannotSentCB = None
     self.proto = proto
     self.dispatchMap = {}
     self.setStub(stub)
Beispiel #5
0
    def __init__(self, ip, port, connectorHandler=None, reuseAddr=False):
        super(TcpServer, self).__init__()

        self.logger = LogManager.getLogger('MarsRpc.TcpServer')
        self.ip = ip
        self.port = port
        self.connectorHandler = connectorHandler
        self.create_socket(socket.AF_INT, socket.SOCK_STREAM)
        if reuseAddr:
            self.set_reuse_addr()
        self.started = False
        self.tryBind()
        self.logger.info('TcpServer init: server liston on: %s, %d', self.ip, self.port)
        self.listen(50)
Beispiel #6
0
    def __init__(self, fd, peername):
        super(TcpConnector, self).__init__(fd)

        self.status = TcpConnector.ST_INIT
        self.wBuffer = StringIO()

        if fd:
            self.status = TcpConnector.ST_ESTABLISHED

        self.logger = LogManager.getLogger('MarsRpc.TcpConnector')
        self.recvBuffSize = TcpConnector.DEF_RECV_BUFFER
        self.channelObj = None
        self.peername = peername

        fd and self.setOption()
Beispiel #7
0
    def __init__(self, host, port, conf, proto='BSON'):
        super(GateClient, self).__init__(self)
        self.logger = LogManager.getLogger('Client.GateClient')
        self.client = ChannelClient(host, port, self)
        self.status = GateClient.ST_INIT
        self.inReconnect = False
        self.reconnectData = None
        self.gateStub = None
        self.encoder = Md5IndexEncoder()

        # traceback
        self.tbHandler = None
        self.proto = proto
        enforceEncryption = bool(conf.get('enforceEncryption', False))
        loginKeyPath = conf.get('loginKeyPath', None)
        loginKeyContent = conf.get('loginKeyContent', None)
        useKeyczar = bool(conf.get('useKeyczar', None))
        self.zippedEnabled = bool(conf.get('zippedEnabled', False))
        self.enableRegMd5Index = bool(conf.get('enableRegMd5Index', False))

        self.receivedSeq = 0
        self.useMessageCache = False
        self.sessionPaddingMinLen = 16
        self.sessionPaddingMaxLen = 64

        self.connectStatus = Common_pb2.ConnectReply.RT_BUSY
        self.sessionSeed = ClientGate_pb2.SessionSeed()
        if enforceEncryption:
            if useKeyczar:
                from Utils.SessionEncrypter import LoginKeyEncrypter
                self.keyEncrypter = LoginKeyEncrypter(loginKeyPath)
            else:
                from Utils.SessionEncrypter import LoginKeyEncrypterNoKeyczar
                self.keyEncrypter = LoginKeyEncrypterNoKeyczar(loginKeyPath, loginKeyContent)
        else:
            self.keyEncrypter = None

        self.onEventCallbacks = {
            GateClient.CB_ON_CONNECT_FAILED:        set(),
            GateClient.CB_ON_CONNECT_SUCCESSED:     set(),
            GateClient.CB_ON_DISCONNECTED:          set(),
            GateClient.CB_ON_CONNECT_REPLY:         set(),
            GateClient.CB_ON_RELIABLE_MSG_UNSENT:   set(),
        }
Beispiel #8
0
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

import os
import traceback

from MarsLog.LogManager import LogManager
import PathHelper as PH

_logger = LogManager.getLogger('Utils.EntityScanner')

def _getModuleFiles(moduleDir):
    moduleNameSet = set()
    try:
        files = os.listdir(moduleDir)
    except:
        _logger.error('error in _getModuleFiles: directory is %s', moduleDir)
        return ()
    for filename in files:
        fileList = filename.split('.')
        if len(fileList) == 2:
            moduleName, extension = fileList
            if extension in ('py', 'pyc'):
                moduleNameSet.add(moduleName)
    moduleNameSet.discard('__init__')
Beispiel #9
0
 def __init__(self):
     self.logger = LogManager.getLogger('Utils.EntityFactory')
     self.entityClasses = {}
Beispiel #10
0
 def __init__(self, channelCreator=None):
     super(ConnectorManager, self).__init__()
     self.logger = LogManager.getLogger('MarsRpc.ConnectorManager')
     self.channelCreator = channelCreator
Beispiel #11
0
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

import PathHelper as PH
PH.addPathes('../')

from MarsLog.LogManager import LogManager
from RpcArgument import ConvertError, RpcArgument, Avatar, MailBox
from EntityManager import EntityManager

MARS_RPC_CLIENT = 0 # client => server
MARS_RPC_SERVER = 1 # server => server
MARS_RPC_CS_ALL = 2 # client/server => server
MARS_RPC_CLIENT_STUB = 3 # server => client

_logger = LogManager.getLogger('Utils.RpcDecorator')

class RpcMethod(object):
    def __init__(self, func, rpcType, argTypes, pub):
        super(RpcMethod, self).__init__()
        self.func = func
        self.rpcType = rpcType
        self.argTypes = argTypes
        self.pub = pub

    def call(self, entity, placeHolder, paramters):
        if not isinstance(paramters, dict):
            _logger.warn('call: paramter decode failed in RPC %s(%s)', self.func.__name__, str(self.argTypes))
            return
        args = []
        first = True
Beispiel #12
0
 def __init__(self, connector):
     super(LoggingChannelObj, self).__init__()
     self.loggero = LogManager.getLogger('MarsRpc.LoggingChannelObj')
     self.connector = connector
Beispiel #13
0
 def __init__(self, connector):
     super(EchoChannelObj, self).__init__()
     self.logger = LogManager.getLogger('MarsRpc.EchoChannelObj')
     self.connector = connector
Beispiel #14
0
 def __init__(self, ip, port, connectorHandler=None):
     super(TcpClient, self).__init__(None, (ip, port))
     self.logger = LogManager.getLogger('MarsRpc.TcpClient')
     self.logger.info('init tcp client, connect to : %s', self.peername)