Exemplo n.º 1
0
        public Task <object> RecieveObject()
        {
            return(Task.Run(() =>
            {
                if (socket.Available == 0)
                {
                    return null;
                }

                byte[] data = new byte[socket.ReceiveBufferSize];

                using (Stream s = new NetworkStream(socket))
                    s.Read(data, 0, data.Length);
                MemoryStream memory = new MemoryStream(data);
                memory.Position = 0;

                BinaryFormatter formatter = new BinaryFormatter();
                object obj = formatter.Deserialize(memory);
                memory.Close();

                if (obj is byte[] byteObj)
                {
                    obj = AesEncryption.Decryption(byteObj);
                }

                return obj;
            }));
        }
Exemplo n.º 2
0
 private async void ServerSendAllUsersPacket(object obj)
 {
     byte[] encrypted = AesEncryption.Encryption(obj);
     await Task.Run(() =>
     {
         foreach (User user in users)
         {
             user.SendObject(encrypted);
         }
     });
 }
Exemplo n.º 3
0
 private void DeclineButton_Click(object sender, EventArgs e)
 {
     if (!IAmServer)
     {
         localUser.SendObject(AesEncryption.Encryption(new MessagePacket(WordTextBox.Text, false)));
     }
     else
     {
         MessagePacket mp = new MessagePacket(WordTextBox.Text, false);
         mp.Nick    = ((User)ClientsList.Items[0]).Nick;
         mp.Referee = localUser.Nick;
         ServerSendAllUsersMessage(mp, false);
     }
     AcceptButton.Enabled  = false;
     DeclineButton.Enabled = false;
     WordTextBox.Text      = "";
     pictureBox1.Image     = null;
 }
Exemplo n.º 4
0
        public object ServerReadObject()
        {
            byte[] data = new byte[socket.ReceiveBufferSize];

            using (Stream s = new NetworkStream(socket))
            {
                s.Read(data, 0, data.Length);
                MemoryStream memory = new MemoryStream(data);
                memory.Position = 0;

                BinaryFormatter formatter = new BinaryFormatter();
                object          obj       = formatter.Deserialize(memory);
                memory.Close();

                if (obj is byte[] byteObj)
                {
                    obj = AesEncryption.Decryption(byteObj);
                }

                return(obj);
            }
        }
Exemplo n.º 5
0
        private async void SendButton_Click(object sender, EventArgs e)
        {
            bool sent    = false;
            bool find    = false;
            bool correct = false;

            if ((GMComboBox.SelectedIndex == 0) && (HistoryListBox.Items.Count > 0) && (MessageTextBox.TextLength > 0))
            {
                for (int i = HistoryListBox.Items.Count - 1; i >= 0; i--)
                {
                    if (((MessagePacket)HistoryListBox.Items[i]).Res == "Accepted")
                    {
                        find = true;
                        string word = ((MessagePacket)HistoryListBox.Items[i]).Word;
                        if (char.ToLower(MessageTextBox.Text.ToCharArray()[0]) == char.ToLower(word.ToCharArray()[word.Length - 1]))
                        {
                            correct = true;
                        }
                        break;
                    }
                }
            }
            else if (GMComboBox.SelectedIndex == 1)
            {
                correct = MessageTextBox.Text.StartsWith(TemplateTextBox.Text);
            }
            else if (GMComboBox.SelectedIndex == 2)
            {
                correct = MessageTextBox.Text.EndsWith(TemplateTextBox.Text);
            }


            if ((MessageTextBox.TextLength > 0) && (correct || (!find && (GMComboBox.SelectedIndex == 0))))
            {
                if (!IAmServer)
                {
                    localUser.SendObject(AesEncryption.Encryption(new QuestionPacket(MessageTextBox.Text)));
                }
                else
                {
                    ((User)ClientsList.Items[1]).SendObject(AesEncryption.Encryption(new QuestionPacket(MessageTextBox.Text, !HistoryDict.ContainsKey(MessageTextBox.Text))));
                }
                MessageTextBox.Text = "";
                sent = true;
            }
            if (!sent)
            {
                await Task.Run(() =>
                {
                    int i         = 0;
                    Point p       = new Point(0, 0);
                    Action change = () =>
                    {
                        p = SendButton.Location;
                        SendButton.BackColor = Color.Red;
                        SendButton.FlatStyle = FlatStyle.Popup;
                        SendButton.Enabled   = false;
                    };
                    Action move = () =>
                    {
                        SendButton.Location = new Point(SendButton.Location.X + Convert.ToInt32(Math.Sin(i)), SendButton.Location.Y);
                    };
                    Action back = () =>
                    {
                        SendButton.BackColor = Color.FromArgb(225, 225, 225);
                        SendButton.FlatStyle = FlatStyle.Standard;
                        SendButton.Location  = p;
                        SendButton.Enabled   = true;
                    };
                    Invoke(change);
                    for (i = 0; i < 20; i++)
                    {
                        Invoke(move);
                        Thread.Sleep(40);
                    }
                    Invoke(back);
                });
            }
        }
Exemplo n.º 6
0
        private Task ServerMonitor()
        {
            while (true)
            {
                Thread.Sleep(10);
                foreach (User user in users.ToList())
                {
                    if (!user.ServerSocketConnected())
                    {
                        users.Remove(user);
                        Action action = () =>
                        {
                            ClientsList.Items.Remove(user);
                        };
                        Invoke(action);
                        ServerSendAllUsersPacket(new QueuePacket(ClientsList.Items));
                        continue;
                    }

                    if (user.socket.Available != 0)
                    {
                        object obj = user.ServerReadObject();

                        if (obj is MessagePacket mp)
                        {
                            mp.Nick    = ((User)ClientsList.Items[0]).Nick;
                            mp.Referee = ((User)ClientsList.Items[1]).Nick;

                            ServerSendAllUsersMessage(mp, mp.Res == "Accepted");
                            SendButtonCheck();
                        }
                        else if (obj is QuestionPacket qp)
                        {
                            qp.BColor = !HistoryDict.ContainsKey(qp.Word);
                            if (((User)ClientsList.Items[1]).guid == localUser.guid)
                            {
                                Action action = () =>
                                {
                                    AcceptButton.Enabled  = true;
                                    DeclineButton.Enabled = true;
                                    WordTextBox.Text      = qp.Word;

                                    Bitmap   bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                                    Graphics g   = Graphics.FromImage(bmp);
                                    if (qp.BColor)
                                    {
                                        g.Clear(Color.FromArgb(0, 255, 0));
                                    }
                                    else
                                    {
                                        g.Clear(Color.FromArgb(255, 0, 0));
                                    }
                                    pictureBox1.Image = bmp;

                                    if (AutoAcceptCheckBox.Checked)
                                    {
                                        AcceptButton_Click(null, null);
                                    }
                                };
                                Invoke(action);
                            }
                            else
                            {
                                ((User)ClientsList.Items[1]).SendObject(AesEncryption.Encryption(qp));
                            }
                        }
                        else if (obj is UserLoginPacket ulp)
                        {
                            user.Nick = ulp.Nick;
                            user.guid = Guid.NewGuid();
                            rsa.FromXmlString(ulp.OpenSecret);

                            BinaryFormatter    formatter = new BinaryFormatter();
                            ServerSecretPacket ssp       = new ServerSecretPacket();
                            SerializableAes    sa        = new SerializableAes(AesEncryption.Key);
                            using (MemoryStream stream = new MemoryStream())
                            {
                                formatter.Serialize(stream, sa);
                                ssp.Secret = rsa.Encrypt(stream.ToArray(), RSAEncryptionPadding.OaepSHA256);
                            }
                            ssp.guid    = user.guid;
                            ssp.GameRun = GameStarted;
                            Action action = () =>
                            {
                                ClientsList.Items.Add(user);
                                ssp.start = new StartPacket(GMComboBox.SelectedIndex, TemplateTextBox.Text);
                            };
                            Invoke(action);
                            user.SendObject(ssp);
                            Thread.Sleep(10);
                            ServerSendAllUsersPacket(new QueuePacket(ClientsList.Items));
                        }
                        else if (obj is HistoryPacket hp)
                        {
                            user.SendObject(AesEncryption.Encryption(new HistoryPacket(HistoryListBox.Items)));
                        }
                        else
                        {
                            throw new Exception("Server: New Packet " + obj.GetType());
                        }
                    }
                }
            }
        }