private void Test(IMPObject parameters) { Hashtable rdata = new Hashtable(); rdata["c"] = parameters.GetUtfString("c"); DispatchEvent(new MPEvent(Program.EVENT_TEST + m_PrefabConnecterId, rdata)); }
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)); }
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); } }
//*********************************** 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); }
/// <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)); } }
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)); } }