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; }
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); }