Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestObject"></param>
        private void DispatchRequest(IMPObject requestObject)
        {
            IMessage message = new Message();

            if (requestObject.IsNull(CONTROLLER_ID))
            {
                throw new Exception("Request rejected: No Controller ID in request!");
            }
            if (requestObject.IsNull(ACTION_ID))
            {
                throw new Exception("Request rejected: No Action ID in request!");
            }
            message.Id      = Convert.ToInt32(requestObject.GetShort(ACTION_ID));
            message.Content = requestObject.GetMPObject(PARAM_ID);
            message.IsUDP   = requestObject.ContainsKey(UDP_PACKET_ID);
            if (message.IsUDP)
            {
                message.PacketId = requestObject.GetLong(UDP_PACKET_ID);
            }
            int         @byte      = requestObject.GetByte(CONTROLLER_ID);
            IController controller = this.bitSwarm.GetController(@byte);

            if (controller == null)
            {
                throw new Exception("Cannot handle server response. Unknown controller, id: " + @byte);
            }
            controller.HandleMessage(message);
        }
        private void FnLogin(IMessage msg)
        {
            IMPObject content = msg.Content;
            Hashtable data    = new Hashtable();

            if (content.IsNull(BaseRequest.KEY_ERROR_CODE))
            {
                mpnet.MySelf             = new MPUser(content.GetInt(LoginRequest.KEY_ID), content.GetUtfString(LoginRequest.KEY_USER_NAME));
                mpnet.MySelf.PrivilegeId = content.GetShort(LoginRequest.KEY_PRIVILEGE_ID);
                mpnet.SetReconnectionSeconds(content.GetShort(LoginRequest.KEY_RECONNECTION_SECONDS));
                mpnet.MySelf.PrivilegeId = content.GetShort(LoginRequest.KEY_PRIVILEGE_ID);
                data["user"]             = mpnet.MySelf;
                data["data"]             = content.GetMPObject(LoginRequest.KEY_PARAMS);
                MPEvent evt = new MPEvent(MPEvent.LOGIN, data);
                mpnet.DispatchEvent(evt);
            }
            else
            {
                short code = content.GetShort(BaseRequest.KEY_ERROR_CODE);
                data["errorCode"] = code;
                mpnet.DispatchEvent(new MPEvent(MPEvent.LOGIN_ERROR, data));
            }
        }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="evt"></param>
        public void HandleHandShake(IMPObject parameters)
        {
            IMPObject obj2 = parameters;

            if (obj2.IsNull(BaseRequest.KEY_ERROR_CODE))
            {
                sessionToken = obj2.GetUtfString(HandshakeRequest.KEY_SESSION_TOKEN);
                bitSwarm.CompressionThreshold = obj2.GetInt(HandshakeRequest.KEY_COMPRESSION_THRESHOLD);
                bitSwarm.MaxMessageSize       = obj2.GetInt(HandshakeRequest.KEY_MAX_MESSAGE_SIZE);
                if (Debug)
                {
                    log.Debug(string.Format("Handshake response: tk => {0}, ct => {1}", sessionToken, bitSwarm.CompressionThreshold));
                }
                if (bitSwarm.IsReconnecting)
                {
                    bitSwarm.IsReconnecting = false;
                    DispatchEvent(new MPEvent(MPEvent.CONNECTION_RESUME));
                }
                else
                {
                    isConnecting = false;
                    Hashtable data = new Hashtable();
                    data["success"] = true;
                    DispatchEvent(new MPEvent(MPEvent.CONNECTION, data));
                }
            }
            else
            {
                short errorCode = obj2.GetShort(BaseRequest.KEY_ERROR_CODE);

                Hashtable hashtable2 = new Hashtable();
                hashtable2["success"]   = false;
                hashtable2["errorCode"] = errorCode;
                DispatchEvent(new MPEvent(MPEvent.CONNECTION, hashtable2));
            }
        }