Example #1
0
        /// <summary>
        /// In context of receiver thread. Takes in data and performs game updates.
        /// </summary>
        private void ReceiveData(byte[] buffer)
        {
            BinaryFormatter bf           = new BinaryFormatter();
            GuessFrame      receiveframe = null;

            try
            {
                //attempt serialization
                receiveframe = (GuessFrame)bf.Deserialize(new MemoryStream(buffer));
            }
            catch
            {
                try
                {
                    Invoke(new Action(() => UpdateStatus("Recieved invalid package from server.")));
                    Invoke(new Action(() => ReceiverDisconnect()));
                }
                //failed to update UI
                catch { }
            }

            if (receiveframe != null)
            {
                //update game
                try
                {
                    Invoke(new Action(() => UpdateGame(receiveframe._GuessOrResponse)));
                }
                //failed to update UI
                catch { }
            }
        }
Example #2
0
        //save the trackbar val and send guess to server
        private void GuessButton_Click(object sender, EventArgs e)
        {
            try
            {
                ListBoxStatus.Items.Insert(0, $"Guess: {TrackBarGuess.Value}");
                GuessFrame gf = new GuessFrame();
                gf.Value = TrackBarGuess.Value;

                MemoryStream ms = new MemoryStream();
                _bf.Serialize(ms, gf);
                _socket.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
                Thread.Sleep(200);// pause between sends
            }
            catch (Exception err)
            {
                ListBoxStatus.Items.Insert(0, $"guess: error {err.Message}");
            }
        }
Example #3
0
        private void UI_Bttn_Guess_Click(object sender, EventArgs e)
        {
            int guessVal;

            // Validate text is a number
            if (!int.TryParse(UI_TxBx_GuessNum.Text, out guessVal))
            {
                MessageBox.Show("Guess must be a number", "Input Error");
                UI_TxBx_GuessNum.Text = UI_TrBr_GuessValue.Minimum.ToString();
                guessVal = UI_TrBr_GuessValue.Minimum;
            }
            // Validate number is less than max
            if (guessVal > UI_TrBr_GuessValue.Maximum)
            {
                guessVal = UI_TrBr_GuessValue.Maximum;
                UI_TxBx_GuessNum.Text = UI_TrBr_GuessValue.Maximum.ToString();
            }
            // Validate number is greater than min
            else if (guessVal < UI_TrBr_GuessValue.Minimum)
            {
                guessVal = UI_TrBr_GuessValue.Minimum;
                UI_TxBx_GuessNum.Text = UI_TrBr_GuessValue.Minimum.ToString();
            }
            UI_TrBr_GuessValue.Value = guessVal;
            // New guessframe
            GuessFrame frame = new GuessFrame(guessVal);
            // Memorystream to serialize to
            MemoryStream ms = new MemoryStream();
            // Need to know how to serialize
            BinaryFormatter bf = new BinaryFormatter();

            //serialize
            bf.Serialize(ms, frame);
            // Send the serialized guessframe
            try
            {
                _sokTalk.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
            }
            catch
            {
                Console.WriteLine("failed sending the guess");
            }
        }
Example #4
0
        /// <summary>
        /// Packages and sends a guess.
        /// </summary>
        private void UI_B_Guess_Click(object sender, EventArgs e)
        {
            //package guess
            GuessFrame      sendFrame = new GuessFrame(UI_TBr_Guess.Value);
            MemoryStream    ms        = new MemoryStream();
            BinaryFormatter bf        = new BinaryFormatter();

            try
            {
                bf.Serialize(ms, sendFrame);

                _SockConnection.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);

                //assume success
                _guess = UI_TBr_Guess.Value;
            }
            catch (Exception ex)
            {
                UI_TB_Status.Text = "Failed to send guess.";
            }
        }
Example #5
0
        private void ReceiveThreadMethod(object obj)
        {
            // Possible optimization of how many bytes we need to accept
            byte[] buffer = new byte[2000];

            int gameNumber = _Rnd.Next(1, 1001);

            Socket sock = (Socket)obj; // Prevent possible cross thread

            sock.ReceiveTimeout = 0;

            while (true)
            {
                // Make sure label is the game number and display it safetly
                Invoke(new Action(() => UI_L_GeneratedNumber.Text = gameNumber.ToString()));

                int bytes = 0;

                try
                {
                    // blocking receive
                    bytes = sock.Receive(buffer);
                }
                catch (Exception ex)
                {
                    // hard disconnection
                    Invoke(new Action(() => ReceiverDisconnect("RecieveThreadMethod : Hard disconnection detected")));
                    return;
                }

                // Detection for soft disconnection
                if (bytes == 0)
                {
                    Invoke(new Action(() => ReceiverDisconnect("RecieveThreadMethod : Soft disconnection detected")));
                    return;
                }

                // Assuming we have the whole information --------------------------------------------------------

                // Recieving
                BinaryFormatter bf           = new BinaryFormatter();
                GuessFrame      receiveframe = null;

                try
                {
                    receiveframe = (GuessFrame)bf.Deserialize(new MemoryStream(buffer));
                }
                catch (Exception ex)
                {
                    try
                    {
                        Invoke(new Action(() => LogError("The data recieved is not the correct type.")));
                    }
                    catch { Console.WriteLine("Got some real problems on line 193 : Form_Server"); }
                }

                if (receiveframe != null)
                {
                    try
                    {
                        Invoke(new Action(() => LogError("The data recieved is : " + receiveframe._GuessOrResponse)));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Got some real problems on line 204 : Form_Server");
                    }

                    // Sending
                    GuessFrame   sendFrame = new GuessFrame(receiveframe._GuessOrResponse.CompareTo(gameNumber));
                    MemoryStream ms        = new MemoryStream();
                    try
                    {
                        bf.Serialize(ms, sendFrame);

                        try
                        {
                            Invoke(new Action(() => LogError(
                                                  "The data sent is : " + receiveframe._GuessOrResponse.CompareTo(gameNumber))));
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Got some real problems on line 212 : Form_Server");
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            Invoke(new Action(() => LogError("Problems serializing the send frame")));
                        }
                        catch
                        {
                            Console.WriteLine("Got some real problems on line 224 : Form_Server");
                        }
                    }

                    try
                    {
                        sock.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            Invoke(new Action(() => LogError("Error sending the frame.")));
                        }
                        catch
                        {
                            Console.WriteLine("Got some real problems on line 225 : Form_Server");
                        }
                    }

                    // Start new game!
                    if (receiveframe._GuessOrResponse.CompareTo(gameNumber) == 0)
                    {
                        gameNumber = _Rnd.Next(1, 1001);
                        try
                        {
                            Invoke(new Action(() => LogError("The client guessed the correct number : ")));
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Got some real problems on line 254 : Form_Server");
                        }
                    }
                }
                else
                {
                    Invoke(new Action(() => ReceiverDisconnect("ReceiveThreadMethod : Received wrong frame type, booted client")));
                    return;
                }
            }
        }
Example #6
0
        private void Th_SocketThread(object obj)
        {
            // Socket is connected
            // The socket
            Socket sock = (Socket)obj;

            //byte array for data
            byte[] buff = new byte[2000];
            // Receive calls shouldn't time out
            sock.ReceiveTimeout = 0;
            Invoke(new Action(() =>
            {
                UI_Lbl_Messages.Text = "Connected. Please guess a number";
            }));
            while (true)
            {
                // store received bytes
                int bytesReceived = 0;

                try
                {
                    // Throws on a hard disconnect
                    bytesReceived = sock.Receive(buff);
                }
                catch (Exception err)
                {
                    // Hard disconnect occurred
                    Console.WriteLine("SocketThread: " + err.Message);

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            NewGame();
                            DisconnectButton();
                            UI_Lbl_Messages.Text = "Server disconnected. Please reconnect to play a new game.";
                        }));
                    }
                    catch (Exception erry)
                    {
                        Console.WriteLine(erry.Message);
                    }


                    return;
                }

                if (bytesReceived == 0)
                {
                    // Soft disconnect occurred
                    Console.WriteLine("SocketThread: socket disconnect detected");

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            NewGame();
                            DisconnectButton();
                            UI_Lbl_Messages.Text = "Server disconnected. Please reconnect to play a new game.";
                        }));
                    }
                    catch (Exception erry)
                    {
                        Console.WriteLine(erry.Message);
                    }

                    return;
                }
                // Deserialize data from buffer
                BinaryFormatter bf = new BinaryFormatter();

                GuessFrame guess = null;

                try
                {
                    guess = (GuessFrame)bf.Deserialize(new MemoryStream(buff));
                }
                catch (Exception err)
                {
                    // bad info given - unexpected data
                    Console.WriteLine("SocketThread: " + err.Message);

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            NewGame();
                            DisconnectButton();
                            UI_Lbl_Messages.Text = "Disconnected from server. Stop hacking my microwave! Please reconnect to play again.";
                        }));
                    }
                    catch (Exception erry)
                    {
                        Console.WriteLine(erry.Message);
                    }

                    return;
                }

                string guessResponse = "";
                if (guess._GuessOrResponse < 0)
                {
                    guessResponse = "Guess was too low!";
                    // Make the lowest value on the trackbar the guess as the number cannot be any lower
                    // Update the minimum label

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            UI_TrBr_GuessValue.Minimum = UI_TrBr_GuessValue.Value + 1;
                            UI_Lbl_Min.Text            = UI_TrBr_GuessValue.Minimum.ToString();
                        }));
                    }
                    catch (Exception err)
                    {
                        Console.WriteLine(err.Message);
                    }
                }
                else if (guess._GuessOrResponse > 0)
                {
                    guessResponse = "Guess was too high!";
                    // Make the highest value on the trackbar the guess as the number cannot be any higher
                    // Update the maximum label

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            UI_TrBr_GuessValue.Maximum = UI_TrBr_GuessValue.Value - 1;
                            UI_Lbl_Max.Text            = UI_TrBr_GuessValue.Maximum.ToString();
                        }));
                    }
                    catch (Exception err)
                    {
                        Console.WriteLine(err.Message);
                    }
                }
                else
                {
                    guessResponse = "Correct! Enter another guess to start a new game...";
                    // Reset controls
                    Invoke(new Action(() => NewGame()));
                }
                // Now update the UI based on guess
                Invoke(new Action(() => UI_Lbl_Messages.Text = guessResponse));
            }
        }
Example #7
0
        /// <summary>
        /// Main receiving thread
        /// </summary>
        /// <param name="sok"></param>
        private void MainRXThread(object obj)
        {
            byte[] buffer = new byte[2000];
            Socket sok    = (Socket)obj;

            sok.ReceiveTimeout = 0;
            while (true)
            {
                int bytes = 0;
                try
                {
                    bytes = sok.Receive(buffer);
                }
                catch (Exception err)
                {
                    Console.WriteLine("RXthread : " + err.Message);

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            GetNewNum();
                            UI_Lbl_ServerGuess.Text = _secretNum.ToString();
                        }));
                    }
                    catch (Exception erry)
                    {
                        Console.WriteLine(erry.Message);
                    }


                    // Start listener again since disconnect
                    InitSokcet();
                    return;
                }
                if (bytes == 0)
                {
                    Console.WriteLine("RXthread : soft disconnect");

                    try
                    {
                        Invoke(new Action(() =>
                        {
                            GetNewNum();
                            UI_Lbl_ServerGuess.Text = _secretNum.ToString();
                        }));
                    }
                    catch (Exception erry)
                    {
                        Console.WriteLine(erry.Message);
                    }

                    // Start listener again since disconnect
                    InitSokcet();
                    return;
                }


                // Process data

                GuessFrame gf = null;

                try
                {
                    gf = (GuessFrame)_bf.Deserialize(new MemoryStream(buffer));
                }
                catch (Exception err)
                {
                    // bad info given - unexpected data
                    Console.WriteLine("SocketThread: " + err.Message);
                    //MessageBox.Show("Stop hacking my microwave!", "Data Error");

                    sok.Close();
                    InitSokcet();

                    Invoke(new Action(() =>
                    {
                        GetNewNum();
                        UI_Lbl_ServerGuess.Text = _secretNum.ToString();
                    }));

                    return;
                }

                Console.WriteLine(gf._GuessOrResponse);
                int          howClose = gf._GuessOrResponse.CompareTo(_secretNum);
                MemoryStream ms       = new MemoryStream();
                _bf.Serialize(ms, new GuessFrame(howClose));
                // Too low
                if (howClose < 0)
                {
                    try
                    {
                        sok.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
                    }
                    catch
                    {
                        Console.WriteLine("Failed send");
                    }
                }
                // Too high
                else if (howClose > 0)
                {
                    try
                    {
                        sok.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
                    }
                    catch
                    {
                        Console.WriteLine("Failed send");
                    }
                }
                // Correct guess
                else
                {
                    try
                    {
                        sok.Send(ms.GetBuffer(), (int)ms.Length, SocketFlags.None);
                        // Get new number and update UI
                        GetNewNum();

                        try
                        {
                            Invoke(new Action(() => UI_Lbl_ServerGuess.Text = _secretNum.ToString()));
                        }
                        catch (Exception err)
                        {
                            Console.WriteLine(err.Message);
                        }
                    }
                    catch
                    {
                        Console.WriteLine("Failed send");
                    }
                }
            }
        }