/// <summary> /// Sends to the server if the player wants to join or watch a game /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listViewAllRooms_SelectedIndexChanged(object sender, EventArgs e) { if (listViewAllRooms.SelectedItems.Count > 0) { string player2_state = listViewAllRooms.SelectedItems[0].SubItems[4].Text; if (player2_state == "") { MsgToSend = "join;" + listViewAllRooms.SelectedItems[0].SubItems[0].Name; PopUpMessage = new PopUpMessage("Waiting for response..."); PopUpMessage.DisableButtons(); PopUpMessage.Show(); ClientSocket.Send(Encoding.ASCII.GetBytes(MsgToSend), 0, MsgToSend.Length, SocketFlags.None); } else { MsgToSend = "watch;" + listViewAllRooms.SelectedItems[0].SubItems[0].Name; ClientSocket.Send(Encoding.ASCII.GetBytes(MsgToSend), 0, MsgToSend.Length, SocketFlags.None); } } }
/// <summary> /// Awaits to recieve data from server and invokes convenient action /// </summary> private void RecieveFromServer() { while (EndConnectionFlag == 0) { CheckForIllegalCrossThreadCalls = false; try { byte[] MsgBt = new byte[1024]; int size = ClientSocket.Receive(MsgBt); RecievedMsg = Encoding.ASCII.GetString(MsgBt, 0, size); string[] RecievedMsgArray = RecievedMsg.Split(';'); //Create a room if (RecievedMsg.IndexOf("room") > -1) { RoomForm roomForm = new RoomForm(ClientSocket, RecievedMsg, listboxCategory.SelectedItem.ToString(), listboxDifficulty.SelectedItem.ToString()); Invoke((MethodInvoker) delegate() { RecieveThread.Suspend(); this.Hide(); roomForm.Show(); roomForm.FormClosed += RoomForm_FormClosed; }); } //Joined a room if (RecievedMsg.IndexOf("joined") > -1) { PopUpMessage.Close(); RoomForm roomForm = new RoomForm(ClientSocket, RecievedMsg, listViewAllRooms.SelectedItems[0].SubItems[1].Text, listViewAllRooms.SelectedItems[0].SubItems[2].Text); Invoke((MethodInvoker) delegate() { gamer2 = RecievedMsgArray[2]; RecieveThread.Suspend(); this.Hide(); roomForm.Show(); roomForm.FormClosed += RoomForm_FormClosed; }); } //Watch a game if (RecievedMsg.IndexOf("Watch_game") > -1) { RoomForm roomForm = new RoomForm(ClientSocket, RecievedMsg, listViewAllRooms.SelectedItems[0].SubItems[1].Text, listViewAllRooms.SelectedItems[0].SubItems[2].Text); Invoke((MethodInvoker) delegate() { RecieveThread.Suspend(); this.Hide(); roomForm.Show(); roomForm.FormClosed += RoomForm_FormClosed; }); } //Show available rooms if (RecievedMsg.IndexOf("refresh") > -1) { string AllRoomsSerialized = RecievedMsg.Split(';')[1]; ShowRooms(AllRoomsSerialized); } //Pressed wrong choice (Join/Watch) if (RecievedMsg.IndexOf("sorry") > -1) { PopUpMessage.Close(); PopUpMessage = null; PopUpMessage = new PopUpMessage("Sorry. This room is not available now."); PopUpMessage.DisableButtons(); PopUpMessage.ShowDialog(); AvailableRooms(); } //Owner refused the Join request if (RecievedMsg.IndexOf("refused") > -1) { PopUpMessage.Close(); PopUpMessage = null; PopUpMessage = new PopUpMessage("Sorry. Your request was declined."); PopUpMessage.DisableButtons(); PopUpMessage.ShowDialog(); AvailableRooms(); } } catch (EndOfStreamException) { MessageBox.Show("Connection ended. Server is down."); EndConnectionFlag = 1; } catch (IOException) { MessageBox.Show("Connection ended. Server is down."); EndConnectionFlag = 1; } } }