Beispiel #1
0
        private void Test(IMPObject parameters)
        {
            Hashtable rdata = new Hashtable();

            rdata["c"] = parameters.GetUtfString("c");
            DispatchEvent(new MPEvent(Program.EVENT_TEST + m_PrefabConnecterId, rdata));
        }
Beispiel #2
0
        public override void HandleMessage(IMessage message)
        {
            if (mpnet.Debug)
            {
                log.Info(message.ToString());
            }
            IMPObject content = message.Content;
            //Hashtable data = new Hashtable();
            //data["cmd"] = content.GetUtfString(KEY_CMD);
            //data["params"] = content.GetMPObject(KEY_PARAMS);
            //if (message.IsUDP)
            //{
            //data["packetId"] = message.PacketId;
            //}
            //MPEvent evt = new MPEvent(MPEvent.EXTENSION_RESPONSE, data);
            string    cmd        = content.GetUtfString(KEY_CMD);
            IMPObject parameters = content.GetMPObject(KEY_PARAMS);

            if (message.IsUDP)
            {
                parameters.PutLong("packetId", message.PacketId);
            }
            mpnet.HandleExtension(cmd, parameters);
            //mpnet.DispatchEvent(new MPEvent(MPEvent.EXTENSION_RESPONSE, data));
        }
Beispiel #3
0
 private void ConvertMPObject(IMPArray fieldList, object csObj, Type objType)
 {
     for (int i = 0; i < fieldList.Size(); i++)
     {
         IMPObject     sFSObject = fieldList.GetMPObject(i);
         string        utfString = sFSObject.GetUtfString(FIELD_NAME_KEY);
         MPDataWrapper data      = sFSObject.GetData(FIELD_VALUE_KEY);
         object        obj3      = UnwrapField(data);
         FieldInfo     field     = objType.GetField(utfString, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
         if (field == null)
         {
             throw new Exception(string.Format("The deserialized class ({0}) doesn't contain the field: {1}", objType.FullName, utfString));
         }
         field.SetValue(csObj, obj3);
     }
 }
Beispiel #4
0
        //*********************************** MPObject to Class *********************************
        private object Mp2Cs(IMPObject mpObj)
        {
            if (!mpObj.ContainsKey(CLASS_MARKER_KEY) || !mpObj.ContainsKey(CLASS_FIELDS_KEY))
            {
                throw new Exception("The MPObject passed does not represent any serialized class.");
            }
            string utfString = mpObj.GetUtfString(CLASS_MARKER_KEY);
            Type   type      = Type.GetType(utfString);

            if (type == null)
            {
                throw new Exception("Cannot find type: " + utfString);
            }
            object csObj = Activator.CreateInstance(type);

            if (!(csObj is Serializable))
            {
                throw new Exception(string.Concat("Cannot deserialize object: ", csObj, ", type: ", utfString, " -- It doesn't implement the Serializable interface"));
            }
            ConvertMPObject(mpObj.GetMPArray(CLASS_FIELDS_KEY), csObj, type);
            return(csObj);
        }
Beispiel #5
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));
            }
        }
Beispiel #6
0
        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));
            }
        }