private void recieve_data() { while (true)// to make server read data all time { try { foreach (int port in clients.Keys.ToList()) // scan all clients by port num in Dictionary { foreach (string msg in clients[port].Msgs.ToList()) //scan all mes of each client to check if any client send message { string[] response = msg.Split('&'); string type = response[0]; switch (type) { case "new room": // if user sent new room then server send room id to creator to open myGame form and notify other clients room created int creator = int.Parse(response[1]); string room_name = response[2]; clients[creator].bWriter = "room token&" + rooms_id; //room id Room room_obj = new Room(creator, room_name); rooms.Add(rooms_id, room_obj); foreach (int index in clients.Keys.ToList()) { clients[index].bWriter = "room&" + rooms_id + "&" + room_obj.Name + "&" + room_obj.num_of_players(); } rooms_id++; break; case "join room confirm": int roomid = int.Parse(response[1]); //room id int player2_id = int.Parse(response[2]); //player2 id int owner_id = rooms[roomid].Owner; //player1 id clients[owner_id].bWriter = "new player&" + roomid + "&" + player2_id + "&" + clients[player2_id].Name; //send to player 1 room id and player2 id and name break; case "join room reply": int _roomid = int.Parse(response[1]); //room id int player2 = int.Parse(response[2]); rooms[_roomid].AddPlayer(player2); // add player2 to room dichnary clients[player2].bWriter = "join room accepted&" + _roomid + "&" + clients[rooms[_roomid].Player1].Name; // send to player 2 room id to open myGame from foreach (int index in clients.Keys.ToList()) // send to all client thats room is full 2/2 { clients[index].bWriter = "Change Room Capacity&" + _roomid; //room id } break; case "Button Clicked": int room_id_btn_clck = int.Parse(response[1]); string player_clck_type = response[2]; int x = int.Parse(response[3]); int y = int.Parse(response[4]); int c = int.Parse(response[5]); string mycolor = response[6]; if (player_clck_type.Contains("Player 1")) { clients[rooms[room_id_btn_clck].Player2].bWriter = "BButton&" + x + "&" + y + "&" + c + "&true" + "&" + mycolor; rooms[room_id_btn_clck].Addmove("BButton&" + x + "&" + y + "&" + c + "&false" + "&" + mycolor); } else if (player_clck_type.Contains("Player 2")) { clients[rooms[room_id_btn_clck].Player1].bWriter = "BButton&" + x + "&" + y + "&" + c + "&true" + "&" + mycolor; rooms[room_id_btn_clck].Addmove("BButton&" + x + "&" + y + "&" + c + "&false" + "&" + mycolor); } foreach (int index in rooms[room_id_btn_clck].Watchers) { clients[index].bWriter = "BButton&" + x + "&" + y + "&" + c + "&true" + "&" + mycolor; } break; case "watch room": int watcherid = int.Parse(response[1]); int watchroomid = int.Parse(response[2]); rooms[watchroomid].AddWatcher(watcherid); clients[watcherid].bWriter = "watch room token&" + "##"; foreach (var item in rooms[watchroomid].Moves) { clients[watcherid].bWriter = item; } break; case "Win Game": int winroomid = int.Parse(response[1]); string winplayer = response[2]; break; default: MessageBox.Show(response[0]); break; } clients[port].RemoveMsg(msg); } } } catch (Exception ex) { MessageBox.Show("There is error happened while reading data.\n" + ex.Message, "Error msg!", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.ExitThread(); } } }