Пример #1
0
        private void UserUpdateState(UdpPacket packet)
        {
            UdpPacketUserStateExtend extend = packet.Extend as UdpPacketUserStateExtend;

            //更新用户状态
            ClientUser user = this[packet.FromMAC];

            user.Update(extend.User, extend.UpdateState);

            //用户一览信息回给上线者
            UdpPacket packetUsers = new UdpPacket();

            packetUsers.Address = packet.Address;
            packetUsers.Port    = packet.Port;
            packetUsers.ToMAC   = packet.FromMAC;
            packetUsers.FromMAC = this.MAC;
            packetUsers.Command = UdpPacket.CMD_USER_LIST;
            UdpPacketUserListExtend extendUserList = new UdpPacketUserListExtend();

            packetUsers.Extend = extendUserList;
            foreach (User u in _users)
            {
                extendUserList.AddUser(u);
            }
            _client.Send(packetUsers);

            //上线信息广播给各位
            foreach (IPAddress brdIp in LanServerConfig.Instance.BroadcastAddress)
            {
                SendUpdateStatePacket(extend.UpdateState, user, brdIp);
                Thread.Sleep(50);
            }
        }
        private void EncodeUserListExtend(BinaryWriter wtr, object extendObj)
        {
            UdpPacketUserListExtend extend = extendObj as UdpPacketUserListExtend;

            wtr.Write(extend.Users.Count);

            foreach (User u in extend.Users)
            {
                wtr.Write(u.Address.ToString());
                wtr.Write(u.Port);
                wtr.Write(u.MAC);
                wtr.Write((int)u.Status);
                wtr.Write(u.SecurityKeys.Public.Length);
                wtr.Write(u.SecurityKeys.Public);
            }
        }
Пример #3
0
        private object ResolveUserListExtend(BinaryReader rdr)
        {
            UdpPacketUserListExtend extend = new UdpPacketUserListExtend();

            int count = rdr.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                User u = new User();
                u.Address = IPAddress.Parse(rdr.ReadString());
                u.Port    = rdr.ReadInt32();
                u.MAC     = rdr.ReadString();
                u.Status  = (UserStatus)rdr.ReadInt32();

                int bc = rdr.ReadInt32();
                u.SecurityKeys.Public = rdr.ReadBytes(bc);

                extend.AddUser(u);
            }

            return(extend);
        }