void iSend(ServerGroupMessageType type, Hashtable msg) { ByteArrayBuilder b = new ByteArrayBuilder(false); b.Add((byte)type); uint id = GetID(); sendids.Add(id); if (sendids.Count > 100) { sendids.Remove(0); } b.Add(id); MemoryStream ms = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, msg); b.Add(ms.ToArray()); byte[] bs = b; sock.SendTo(bs, target); DoRecv(bs, bs.Length); }
void OnMsgHandler(ServerGroupMessageType type, Hashtable msg) { if (type == ServerGroupMessageType.UserReply) { int hash = (int)msg["Hash"]; msg["CHAR"] = msg["CHAR " + name]; foreach (PlayerConnection p in clients) { if (p.GetHashCode() == hash && p.SetUserReply(msg)) { break; } } return; } if (type == ServerGroupMessageType.UserLogin) { string name = msg["Name"] as string; if (name == null) { return; } // relogin, drop it foreach (PlayerConnection c in clients) { if (name == c.userName) { c.Dispose(); break; } } } }
public static void Send(ServerGroupMessageType type, Hashtable msg) { if (group == null) { return; } group.iSend(type, msg); }
public static void SetHandle(ServerGroupMessageType type, ServerGroupHandler handler) { if (group == null) { return; } if (handler == null) { group.handler.Remove(type); } else { group.handler[type] = handler; } }
void DoRecv(byte[] b, int sz) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream ms = new MemoryStream(b, 5, sz - 5, false); ServerGroupMessageType type = (ServerGroupMessageType)b[0]; if (!handler.Contains(type)) { return; } try { Hashtable msg = formatter.Deserialize(ms) as Hashtable; ServerGroupHandler h = (ServerGroupHandler)handler[type]; h(type, msg); } catch { } }
void iSend(ServerGroupMessageType type, Hashtable msg) { ByteArrayBuilder b=new ByteArrayBuilder(false); b.Add( (byte)type ); uint id=GetID(); sendids.Add(id); if(sendids.Count>100)sendids.Remove(0); b.Add( id ); MemoryStream ms=new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, msg); b.Add( ms.ToArray() ); byte[] bs=b; sock.SendTo(bs, target); DoRecv(bs, bs.Length); }
public static void SetHandle(ServerGroupMessageType type, ServerGroupHandler handler) { if(group==null)return; if(handler==null) group.handler.Remove(type); else group.handler[ type ]=handler; }
public static void Send(ServerGroupMessageType type, Hashtable msg) { if(group==null)return; group.iSend(type, msg); }
public void OnMsgHandler(ServerGroupMessageType type, Hashtable msg) { if (type == ServerGroupMessageType.GameServerHeartBeat) { string nm = msg["Name"] as string; if (nm == null) { return; } msg["UpdateTick"] = Const.Tick; servers[nm] = msg; } // GameServer ask username & SessionKey if (type == ServerGroupMessageType.UserQuery) { string nm = msg["Name"] as string; if (nm == null) { return; } nm = nm.ToLower(); Hashtable user = accounts.Get(nm); if (user == null) { return; } if (skeys.Contains(nm)) { user["SESSIONKEY"] = skeys[nm]; } user["Hash"] = msg["Hash"]; ServerGroup.Send(ServerGroupMessageType.UserReply, user); } if (type == ServerGroupMessageType.UserSetChar) { string nm = msg["Name"] as string; if (nm == null) { return; } nm = nm.ToLower(); Hashtable user = accounts.Get(nm); if (user == null) { return; } foreach (string n in msg.Keys) { if (!n.StartsWith("CHAR ")) { continue; } user[n] = msg[n]; } accounts.Set(nm, user); } }