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; })); }
private async void ServerSendAllUsersPacket(object obj) { byte[] encrypted = AesEncryption.Encryption(obj); await Task.Run(() => { foreach (User user in users) { user.SendObject(encrypted); } }); }
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; }
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); } }
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); }); } }
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()); } } } } }