Example #1
0
        public void GetRoomModel(out Gunbond_Client.Model.Room room)
        {
            byte[] bMembersCount = new byte[4];
            byte[] bMaxPlayer = new byte[4];
            byte[] bRoomId = new byte[50];

            Buffer.BlockCopy(data, 20, bMembersCount, 0, 4);
            Buffer.BlockCopy(data, 24, bMaxPlayer, 0, 4);
            Buffer.BlockCopy(data, 28, bRoomId, 0, 50);

            string roomId = ConvertBytesToString(bRoomId);
            int maxPlayer = ConvertBytesToInt(bMaxPlayer);
            int memberCount = ConvertBytesToInt(bMembersCount);

            List<Gunbond_Client.Model.Peer> members = new List<Gunbond_Client.Model.Peer>();
            for (int i = 0; i < memberCount; i++)
            {
                byte[] bPeerId = new byte[4];
                byte[] bPeerIp = new byte[4];
                byte[] bPeerPort = new byte[4];

                Buffer.BlockCopy(data, 78 + (i * 8), bPeerId, 0, 4);
                Buffer.BlockCopy(data, 78 + (i * 8) + 4, bPeerIp, 0, 4);
                Buffer.BlockCopy(data, 78 + (i * 8) + 8, bPeerPort, 0, 4);

                int peerId = ConvertBytesToInt(bPeerId);
                IPAddress peerIp = new IPAddress(bPeerIp);
                int listeningPort = ConvertBytesToInt(bPeerPort);

                members.Add(new Gunbond_Client.Model.Peer(peerId, peerIp, listeningPort));
            }

            room = new Gunbond_Client.Model.Room(roomId, members.First(), maxPlayer);
            room.Members = members;
        }
Example #2
0
        public static Message CreateMessageRoomModel(Gunbond_Client.Model.Room room)
        {
            int len = 20 + 50 + 4 + 4 + room.Members.Count * (4 + 4 + 4);
            if (len > 1024) throw new Exception("Panjang data > 1024");

            byte[] data = new byte[len];
            FillHeader(data);
            data[19] = 31;

            byte[] bMembersCount = ConvertIntToBytes(room.Members.Count);
            byte[] bMaxPlayer = ConvertIntToBytes(room.MaxPlayer);
            byte[] bRoomId = ConvertStringToBytes(room.RoomId, 50);

            Buffer.BlockCopy(bMembersCount, 0, data, 20, 4);
            Buffer.BlockCopy(bMaxPlayer, 0, data, 24, 4);
            Buffer.BlockCopy(bRoomId, 0, data, 28, 50);

            for (int i = 0; i < room.Members.Count; i++)
            {
                byte[] bPeerId = ConvertIntToBytes(room.Members[i].PeerId);
                byte[] bPeerIp = room.Members[i].IPAddress.GetAddressBytes();
                byte[] bPeerPort = ConvertIntToBytes(room.Members[i].ListeningPort);

                Buffer.BlockCopy(bPeerId, 0, data, 78 + (i * 8), 4);
                Buffer.BlockCopy(bPeerIp, 0, data, 78 + (i * 8) + 4, 4);
                Buffer.BlockCopy(bPeerPort, 0, data, 78 + (i * 8) + 8, 4);
            }

            return new Message(data);
        }