コード例 #1
0
        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);
        }
コード例 #2
0
        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;
                    }
                }
            }
        }
コード例 #3
0
 public static void Send(ServerGroupMessageType type, Hashtable msg)
 {
     if (group == null)
     {
         return;
     }
     group.iSend(type, msg);
 }
コード例 #4
0
 public static void SetHandle(ServerGroupMessageType type, ServerGroupHandler handler)
 {
     if (group == null)
     {
         return;
     }
     if (handler == null)
     {
         group.handler.Remove(type);
     }
     else
     {
         group.handler[type] = handler;
     }
 }
コード例 #5
0
        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
            {
            }
        }
コード例 #6
0
ファイル: Net.cs プロジェクト: karliky/wowwow
        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);
        }
コード例 #7
0
ファイル: Net.cs プロジェクト: karliky/wowwow
 public static void SetHandle(ServerGroupMessageType type, ServerGroupHandler handler)
 {
     if(group==null)return;
     if(handler==null)
         group.handler.Remove(type);
     else
         group.handler[ type ]=handler;
 }
コード例 #8
0
ファイル: Net.cs プロジェクト: karliky/wowwow
 public static void Send(ServerGroupMessageType type, Hashtable msg)
 {
     if(group==null)return;
     group.iSend(type, msg);
 }
コード例 #9
0
        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);
            }
        }