public void printMsg() { Console.WriteLine(msgCode.ToString()); if (msgCode == 135) { if (msgPeerID != "9999") { Console.WriteLine("msg handshake resp : " + msgDefault + msgCode.ToString() + msgPeerID); // handshake response } else { Console.WriteLine("msg handshake : " + msgDefault + msgCode.ToString()); // handshake } } else if (msgCode == 182) { Console.WriteLine("msg keep alive : " + msgDefault + msgCode.ToString() + msgPeerID); // keep alive } else if (msgCode == 255) { //Console.WriteLine("msg create : " + msgDefault + msgCode.ToString() + msgPeerID + dummyCreateRoom.getMaxPlayer() + dummyCreateRoom.getRoomID()); } else if (msgCode == 254) { Console.WriteLine("msg list request : " + msgDefault + msgCode.ToString() + msgPeerID); } else if (msgCode == 127) { Console.WriteLine("msg success : " + msgDefault + msgCode.ToString()); } else if (msgCode == 128) { Console.WriteLine("msg failed : " + msgDefault + msgCode.ToString()); } else if (msgCode == 253) { Console.WriteLine("msg join room : " + msgDefault + msgCode.ToString() + msgPeerID + dummyCreateRoom.getRoomID()); } else if (msgCode == 252) { Console.WriteLine("msg start game : " + msgDefault + msgCode.ToString() + msgPeerID + dummyCreateRoom.getRoomID()); } else if (msgCode == 235) { Console.WriteLine("msg quit room : " + msgDefault + msgCode.ToString() + msgPeerID); } else if (msgCode == 200) { Console.WriteLine("msg room list : " + msgDefault + msgCode.ToString() + iterate.ToString() + dummyCreateRoom.getPeerID() + dummyCreateRoom.getMaxPlayer() + dummyCreateRoom.getRoomName()); } }
/// <summary> /// Callbacks for Receiving Message from Client and Handle it. /// </summary> private void RecvrMsgCallback() { while (running) { while (waitConfirmation) { } ; try { Console.WriteLine(time); if (time >= maxTime) { Close(); running = false; lock (Tracker.ClientHandlers) { Tracker.ClientHandlers.Remove(IP); } break; } byte[] bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); time = 0; // time // Message UNOS_Sister.Message msg = new UNOS_Sister.Message(); msg.parseMe(bytes); Console.WriteLine(bytes[bytes.Length - 1]); Console.WriteLine("Message : {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); List <byte> response = new List <byte>(); response.AddRange(Encoding.ASCII.GetBytes("GunbondGame00000000")); UNOS_Sister.Message msgResponse = new UNOS_Sister.Message(); // TO DO INITIAL MESSAGE RESPONSE string log = ""; msgResponse.msgPeerID = PeerID; // Message Handling // Handsake if (msg.msgCode == UNOS_Sister.Message.HANDSHAKE) { response.Add(135); response.AddRange(Encoding.ASCII.GetBytes(PeerID));; log += "Handshake from " + (handler.RemoteEndPoint as IPEndPoint).Address.ToString() + ", Peer ID : " + PeerID + "\n"; msgResponse.msgCode = UNOS_Sister.Message.HANDSHAKE; } else if (msg.msgCode == UNOS_Sister.Message.QUIT) // Quit Room { bool found = false; int i = 0; Room room = null; while (!found) { room = Tracker.Rooms.ElementAt(i).Value; foreach (string id in room.PeerIDs) { if (id.Equals(msg.msgPeerID)) { Console.WriteLine("Peer " + msg.msgPeerID + "is found in " + room.getRoomID()); found = true; } } } if (found) { Console.WriteLine("QUIT"); string sRoom = room.getPeerID(); Console.WriteLine("Peer ID : " + sRoom); string s = Tracker.IPPeers[sRoom]; Console.WriteLine("Key : " + s); ClientHandler handlerCreatorPeer = Tracker.ClientHandlers[s]; UNOS_Sister.Message msgConfirmation = msg; msgResponse.msgCode = handlerCreatorPeer.SentForConfirmation(msgConfirmation.Construct()).msgCode; if (msgResponse.msgCode == Message.SUCCESS) { Console.WriteLine("Sukses"); room.PeerIDs.Remove(msg.msgPeerID); if (room.PeerIDs.Count == 0) { Tracker.Rooms.Remove(room.getRoomID()); } } else if (msgResponse.msgCode == Message.FAILED) { Console.WriteLine("Failed"); } else { Console.WriteLine("APA ? " + msgResponse.msgCode); msgResponse.msgCode = Message.FAILED; } } else { msgResponse.msgCode = UNOS_Sister.Message.FAILED; } Console.WriteLine("Quit Room"); } else if (msg.msgCode == UNOS_Sister.Message.START) // Start Room { Room sRoom = Tracker.GetRoom(msg.msgPeerID); if (sRoom != null) { msgResponse.msgCode = UNOS_Sister.Message.SUCCESS; foreach (string id in sRoom.PeerIDs) { if (!id.Equals(msg.msgPeerID)) { Console.WriteLine("Sent Start to : " + id); if (Tracker.IPPeers.ContainsKey(id)) { if (Tracker.ClientHandlers.ContainsKey(Tracker.IPPeers[id])) { Tracker.ClientHandlers[Tracker.IPPeers[id]].handler.Send(msg.Construct()); Console.WriteLine("Sent"); } } } } Thread.Sleep(500); } else { msgResponse.msgCode = UNOS_Sister.Message.FAILED; } Console.WriteLine("Start Room"); } else if (msg.msgCode == UNOS_Sister.Message.KEEP_ALIVE) // Keep Alive { //response = "OK, I will not kill you this time"; msgResponse.msgCode = UNOS_Sister.Message.SUCCESS; log += PeerID + ":" + "Still Alive\n"; time = 0; } else if (msg.msgCode == UNOS_Sister.Message.LIST) // Listing Room { //response = "Oke list of room will be sent sooon"; log += PeerID + ":" + "Request List of Room\n"; msgResponse.msgCode = UNOS_Sister.Message.ROOM; msgResponse.Rooms.Clear(); msgResponse.Rooms.AddRange(Tracker.Rooms.Values); } else if (msg.msgCode == UNOS_Sister.Message.CREATE_ROOM) //Create Room { // Create Room // response = "Oke Room will be created"; if (Tracker.Rooms.Count() + 1 <= Tracker.max_room) { msgResponse.msgCode = UNOS_Sister.Message.SUCCESS; response.Add(127); msg.printMsg(); lock (Tracker.Rooms) { Console.WriteLine("Peer ID :" + msg.msgPeerID); msg.Rooms.ElementAt(0).PeerIDs.Add(msg.msgPeerID); Tracker.Rooms.Add(msg.Rooms[0].getRoomID(), msg.Rooms.ElementAt(0)); } } else { response.Add(128); msgResponse.msgCode = UNOS_Sister.Message.FAILED; } Console.WriteLine("Max Player :" + msg.Rooms[0].getMaxPlayer()); log += PeerID + ":" + "Created Room ID :" + msg.Rooms[0].getRoomID().Substring(0, msg.Rooms[0].getRoomID().IndexOf('\0')) + ", MaxPlayer :" + msg.Rooms[0].getMaxPlayer().ToString() + "\n"; Console.WriteLine(log); } else if (msg.msgCode == Message.JOIN) // Join Room { Console.WriteLine("Join Room"); Console.WriteLine("Room ID : " + msg.Rooms[0].getRoomID()); string sRoom = Tracker.Rooms[msg.Rooms[0].getRoomID()].getPeerID(); if (sRoom != null) { Console.WriteLine("Peer ID : " + sRoom); string s = Tracker.IPPeers[sRoom]; Console.WriteLine("Key : " + s); ClientHandler handlerCreatorPeer = Tracker.ClientHandlers[s]; UNOS_Sister.Message msgConfirmation = new UNOS_Sister.Message(); msgConfirmation.msgCode = Message.CHECK; msgConfirmation.msgPeerID = msg.msgPeerID; msgConfirmation.IP = this.IP; msgResponse.msgCode = handlerCreatorPeer.SentForConfirmation(msgConfirmation.Construct()).msgCode; if (msgResponse.msgCode == Message.SUCCESS) { Console.WriteLine("Sukses"); Room room = Tracker.Rooms[msg.Rooms[0].getRoomID()]; room.PeerIDs.Add(msg.msgPeerID); } else if (msgResponse.msgCode == Message.FAILED) { Console.WriteLine("Failed"); } else { Console.WriteLine("APA ? " + msgResponse.msgCode); msgResponse.msgCode = Message.FAILED; } } else { Room room = Tracker.Rooms[msg.Rooms[0].getRoomID()]; room.PeerIDs.Add(msg.msgPeerID); msgResponse.msgCode = Message.SUCCESS; } } response.Clear(); Console.WriteLine("Message to Write : " + msgResponse.msgCode); response.AddRange(msgResponse.Construct()); if (Tracker.log) { Console.WriteLine("Write Log"); lock (Tracker.fileLog) { Tracker.fileLog.Write(Encoding.ASCII.GetBytes(log), 0, log.Length); Tracker.fileLog.Write(Encoding.ASCII.GetBytes("->"), 0, 2); Tracker.fileLog.Write(response.ToArray(), 0, response.Count); Tracker.fileLog.Write(Encoding.ASCII.GetBytes("\n"), 0, 1); } if (Tracker.LogText != null) { lock (Tracker.LogText) { del update_log_text = new del(() => { Tracker.LogText.Text += log; Tracker.LogText.Text += "->" + Encoding.ASCII.GetString(response.ToArray()) + "\n"; }); Tracker.LogText.Invoke(update_log_text); } } } // Send Response handler.Send(response.ToArray()); } catch (SocketException se) { running = false; lock (Tracker.ClientHandlers) { Tracker.ClientHandlers.Remove(IP); } } } }
void sendMessage() { while (connected) { lock (sendMsg) { while (sendMsg.Count > 0) { try { byte[] MsgToBeSent = sendMsg.Dequeue(); Console.WriteLine("Sending : " + Encoding.ASCII.GetString(MsgToBeSent)); sendDel printSendMsg = new sendDel(() => { peerUI.textBox4.Text = Encoding.ASCII.GetString(MsgToBeSent); }); peerUI.Invoke(printSendMsg); int byteSent = sender.Send(MsgToBeSent); // kirim ke tracker //Receive response from tracker byte[] bytes = new byte[1024]; int byteRec = sender.Receive(bytes); recvDel printRecvMsg = new recvDel(() => { peerUI.textBox5.Text = Encoding.ASCII.GetString(bytes); }); peerUI.Invoke(printRecvMsg); Message mSent = new Message(); mSent.parseMe(MsgToBeSent); Message m = new Message(); m.parseMe(bytes); if (m.msgCode == Message.START) { //start game here playStatus = 1; sendDel printCurrentRoom = new sendDel(() => { peerUI.Close(); }); peerUI.Invoke(printCurrentRoom); } else if (m.msgCode == Message.SUCCESS) { if (mSent.msgCode == Message.START) { //start game here playStatus = 2; sendDel printCurrentRoom = new sendDel(() => { peerUI.Close(); }); peerUI.Invoke(printCurrentRoom); } else if (mSent.msgCode == Message.CREATE_ROOM) { //create room success Console.WriteLine("Create Room Success"); //masukin ke myRoom myRoom = mSent.Rooms[0]; inRoom = true; //masuk ke room yang di create canQuit = false; Console.WriteLine("my Room : " + myRoom.getRoomID()); peerList.Add(this.PeerID); sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = myRoom.getRoomID(); }); peerUI.Invoke(printCurrentRoom); } else if (mSent.msgCode == Message.JOIN) { //join success inRoom = true; sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = joininRoom; }); peerUI.Invoke(printCurrentRoom); //Print Room Member del printRoomMember = new del(() => { for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; } }); peerUI.Invoke(printRoomMember); Console.WriteLine("Join Room Success"); //TO DO : koneksi dengan GameConnection } else if (mSent.msgCode == Message.KEEP_ALIVE) { //keep alive success Console.WriteLine("Keep Alive Success"); } else if (mSent.msgCode == Message.QUIT) { //quit success inRoom = false; sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = "-"; }); peerUI.Invoke(printCurrentRoom); Console.WriteLine("Quit Success"); } } else if (m.msgCode == Message.ROOM) { //get list room roomList.Clear(); roomList.AddRange(m.Rooms); Console.WriteLine("Room List : "); List <string> roomString = new List <string>(); del printRoomList = new del(() => { Console.WriteLine("Room List : "); for (int i = 0; i < roomList.Count; i++) { Console.WriteLine(roomList[i].getRoomID()); roomString.Add(roomList[i].getRoomID()); } peerUI.listBox1.DataSource = roomString; }); peerUI.Invoke(printRoomList); } else if (m.msgCode == Message.FAILED) { if (mSent.msgCode == Message.CREATE_ROOM) { //create room success Console.WriteLine("Create Room FAILED"); } else if (mSent.msgCode == Message.JOIN) { //join success Console.WriteLine("Join Room FAILED"); } else if (mSent.msgCode == Message.KEEP_ALIVE) { //keep alive success Console.WriteLine("Keep Alive FAILED"); } else if (mSent.msgCode == Message.QUIT) { //quit success Console.WriteLine("Quit FAILED"); } } else if (m.msgCode == 100) //Check if myRoom masih muat { Console.WriteLine("jumlah peer : " + peerList.Count()); Console.WriteLine("max player : " + myRoom.getMaxPlayer()); if (peerList.Count() < myRoom.getMaxPlayer()) { Console.WriteLine("Masih bisa join"); IPTable.Add(m.msgPeerID, m.IP); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List <byte> byteList = new List <byte>(); byteList.AddRange(msg); byteList.Add(Message.SUCCESS); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); //Receive response from tracker byte[] join_msg = new byte[1024]; int byteRecs = sender.Receive(join_msg); Message m_ = new Message(); m_.parseMe(join_msg); if (m_.msgCode == Message.SUCCESS) { peerList.Add(m.msgPeerID); //Print Room Member del printRoomMember = new del(() => { Console.WriteLine("RoomMember : "); for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; Console.WriteLine(peerList[i]); } }); peerUI.Invoke(printRoomMember); } else { Console.WriteLine("Sudah join room lain"); } } else { Console.WriteLine("Room already full"); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List <byte> byteList = new List <byte>(); byteList.AddRange(msg); byteList.Add(Message.FAILED); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); } } else if (m.msgCode == Message.QUIT) { peerList.Remove(m.msgPeerID); Console.WriteLine("Peer " + m.msgPeerID + " quit from your room. Boo!"); IPTable.Remove(m.msgPeerID); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List <byte> byteList = new List <byte>(); byteList.AddRange(msg); byteList.Add(Message.SUCCESS); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); //Print Room Member del printRoomMember = new del(() => { Console.WriteLine("RoomMember : "); peerUI.richTextBox1.Text = ""; for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; Console.WriteLine(peerList[i]); } }); peerUI.Invoke(printRoomMember); } } catch (SocketException se) { Console.WriteLine(se.ToString()); if (se.SocketErrorCode == SocketError.ConnectionAborted) { connected = false; } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } } }
void sendMessage() { while (connected) { lock (sendMsg) { while (sendMsg.Count > 0) { try { byte[] MsgToBeSent = sendMsg.Dequeue(); Console.WriteLine("Sending : " + Encoding.ASCII.GetString(MsgToBeSent)); sendDel printSendMsg = new sendDel(() => { peerUI.textBox4.Text = Encoding.ASCII.GetString(MsgToBeSent); }); peerUI.Invoke(printSendMsg); int byteSent = sender.Send(MsgToBeSent); // kirim ke tracker //Receive response from tracker byte[] bytes = new byte[1024]; int byteRec = sender.Receive(bytes); recvDel printRecvMsg = new recvDel(() => { peerUI.textBox5.Text = Encoding.ASCII.GetString(bytes); }); peerUI.Invoke(printRecvMsg); Message mSent = new Message(); mSent.parseMe(MsgToBeSent); Message m = new Message(); m.parseMe(bytes); if (m.msgCode == Message.START) { //start game here playStatus = 1; sendDel printCurrentRoom = new sendDel(() => { peerUI.Close(); }); peerUI.Invoke(printCurrentRoom); } else if (m.msgCode == Message.SUCCESS) { if (mSent.msgCode == Message.START) { //start game here playStatus = 2; sendDel printCurrentRoom = new sendDel(() => { peerUI.Close(); }); peerUI.Invoke(printCurrentRoom); } else if (mSent.msgCode == Message.CREATE_ROOM) { //create room success Console.WriteLine("Create Room Success"); //masukin ke myRoom myRoom = mSent.Rooms[0]; inRoom = true; //masuk ke room yang di create canQuit = false; Console.WriteLine("my Room : " + myRoom.getRoomID()); peerList.Add(this.PeerID); sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = myRoom.getRoomID(); }); peerUI.Invoke(printCurrentRoom); } else if (mSent.msgCode == Message.JOIN) { //join success inRoom = true; sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = joininRoom; }); peerUI.Invoke(printCurrentRoom); //Print Room Member del printRoomMember = new del(() => { for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; } }); peerUI.Invoke(printRoomMember); Console.WriteLine("Join Room Success"); //TO DO : koneksi dengan GameConnection } else if (mSent.msgCode == Message.KEEP_ALIVE) { //keep alive success Console.WriteLine("Keep Alive Success"); } else if (mSent.msgCode == Message.QUIT) { //quit success inRoom = false; sendDel printCurrentRoom = new sendDel(() => { peerUI.textBox6.Text = "-"; }); peerUI.Invoke(printCurrentRoom); Console.WriteLine("Quit Success"); } } else if (m.msgCode == Message.ROOM) { //get list room roomList.Clear(); roomList.AddRange(m.Rooms); Console.WriteLine("Room List : "); List<string> roomString = new List<string>(); del printRoomList = new del(() => { Console.WriteLine("Room List : "); for (int i = 0; i < roomList.Count; i++) { Console.WriteLine(roomList[i].getRoomID()); roomString.Add(roomList[i].getRoomID()); } peerUI.listBox1.DataSource = roomString; }); peerUI.Invoke(printRoomList); } else if (m.msgCode == Message.FAILED) { if (mSent.msgCode == Message.CREATE_ROOM) { //create room success Console.WriteLine("Create Room FAILED"); } else if (mSent.msgCode == Message.JOIN) { //join success Console.WriteLine("Join Room FAILED"); } else if (mSent.msgCode == Message.KEEP_ALIVE) { //keep alive success Console.WriteLine("Keep Alive FAILED"); } else if (mSent.msgCode == Message.QUIT) { //quit success Console.WriteLine("Quit FAILED"); } } else if (m.msgCode == 100) //Check if myRoom masih muat { Console.WriteLine("jumlah peer : " + peerList.Count()); Console.WriteLine("max player : " + myRoom.getMaxPlayer()); if (peerList.Count() < myRoom.getMaxPlayer()) { Console.WriteLine("Masih bisa join"); IPTable.Add(m.msgPeerID, m.IP); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List<byte> byteList = new List<byte>(); byteList.AddRange(msg); byteList.Add(Message.SUCCESS); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); //Receive response from tracker byte[] join_msg = new byte[1024]; int byteRecs = sender.Receive(join_msg); Message m_ = new Message(); m_.parseMe(join_msg); if (m_.msgCode == Message.SUCCESS) { peerList.Add(m.msgPeerID); //Print Room Member del printRoomMember = new del(() => { Console.WriteLine("RoomMember : "); for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; Console.WriteLine(peerList[i]); } }); peerUI.Invoke(printRoomMember); } else { Console.WriteLine("Sudah join room lain"); } } else { Console.WriteLine("Room already full"); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List<byte> byteList = new List<byte>(); byteList.AddRange(msg); byteList.Add(Message.FAILED); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); } } else if (m.msgCode == Message.QUIT) { peerList.Remove(m.msgPeerID); Console.WriteLine("Peer " + m.msgPeerID + " quit from your room. Boo!"); IPTable.Remove(m.msgPeerID); byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000"); List<byte> byteList = new List<byte>(); byteList.AddRange(msg); byteList.Add(Message.SUCCESS); msg = byteList.ToArray(); int byteSent_ = sender.Send(msg); //Print Room Member del printRoomMember = new del(() => { Console.WriteLine("RoomMember : "); peerUI.richTextBox1.Text = ""; for (int i = 0; i < peerList.Count; i++) { peerUI.richTextBox1.Text += peerList[i]; peerUI.richTextBox1.Text += "\n"; Console.WriteLine(peerList[i]); } }); peerUI.Invoke(printRoomMember); } } catch (SocketException se) { Console.WriteLine(se.ToString()); if (se.SocketErrorCode == SocketError.ConnectionAborted) { connected = false; } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } } }