Ejemplo n.º 1
0
        private static void OnBindServerSocketRequestMessageReceived(BindServerSocketRequestMessage message)
        {
            if (ProxySessionManager.TryGet(message.SessionId, out ProxySession session))
            {
                ServerSocket socket = message.ServerId != -1
                    ? ServerManager.GetSocket(message.ServerType, message.ServerId)
                    : ServerManager.GetNextSocket(message.ServerType);

                if (socket != null)
                {
                    session.SetSocket(socket, message);
                }
                else
                {
                    ServerRequestManager.SendResponse(new BindServerSocketResponseMessage
                    {
                        ServerType = message.ServerType,
                        ServerId   = message.ServerId,

                        Success = false
                    }, message);
                }
            }
            else
            {
                ServerRequestManager.SendResponse(new BindServerSocketResponseMessage
                {
                    ServerType = message.ServerType,
                    ServerId   = message.ServerId,

                    Success = false
                }, message);
            }
        }
Ejemplo n.º 2
0
        public override void Decode(ByteStream stream)
        {
            this.AccountId = stream.ReadLong();
            this.Country   = stream.ReadString(900000);

            this.ServerSocketTypeList = new LogicArrayList <int>();
            this.ServerSocketIdList   = new LogicArrayList <int>();

            for (int i = stream.ReadVInt(); i > 0; i--)
            {
                this.ServerSocketTypeList.Add(stream.ReadVInt());
                this.ServerSocketIdList.Add(stream.ReadVInt());
            }

            if (stream.ReadBoolean())
            {
                this.BindRequestMessage = new BindServerSocketRequestMessage();
                this.BindRequestMessage.DecodeHeader(stream);
                this.BindRequestMessage.Decode(stream);
            }
        }
        public void SetSocket(ServerSocket socket, BindServerSocketRequestMessage requestMessage = null)
        {
            if (this.m_destructed)
            {
                return;
            }

            int serverType = socket.ServerType;
            int serverId   = socket.ServerId;

            if (this.m_sockets[serverType] != null)
            {
                this.SendMessage(new StopServerSessionMessage(), serverType);
            }

            this.m_sockets[serverType] = socket;

            if (serverType == 1)
            {
                return;
            }
            if (!this.m_started && socket.ServerType != 9)
            {
                Logging.Warning("ProxySession.setSocket called but session did not start.");
            }

            LogicArrayList <int> serverTypeList = new LogicArrayList <int>();
            LogicArrayList <int> serverIdList   = new LogicArrayList <int>();

            for (int i = 0; i < EnvironmentSettings.SERVER_TYPE_COUNT; i++)
            {
                ServerSocket serverSocket = this.m_sockets[i];

                if (serverSocket != null)
                {
                    serverTypeList.Add(serverSocket.ServerType);
                    serverIdList.Add(serverSocket.ServerId);
                }
            }

            this.SendMessage(new StartServerSessionMessage
            {
                AccountId            = this.AccountId,
                Country              = this.Country,
                ServerSocketTypeList = serverTypeList,
                ServerSocketIdList   = serverIdList,
                BindRequestMessage   = requestMessage
            }, serverType);

            for (int i = 2; i < EnvironmentSettings.SERVER_TYPE_COUNT; i++)
            {
                if (i != serverType && this.m_sockets[serverType] != null)
                {
                    this.SendMessage(new UpdateSocketServerSessionMessage
                    {
                        ServerType = serverType,
                        ServerId   = serverId
                    }, i);
                }
            }
        }