// получение сообщений private void ReceiveMessage() { try { while (true) { if (!connect) { this.Invoke(new MethodInvoker(() => { textBoxChat.Clear(); })); break; } byte[] data = new byte[64]; // буфер для получаемых данных int bytes = 0; MemoryStream memStream = new MemoryStream(); do { bytes = stream.Read(data, 0, data.Length); memStream.Write(data, 0, bytes); }while (stream.DataAvailable); byte[] allData = memStream.ToArray(); if (allData.Length < 3) { continue; } if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Message)) { //MessageBox.Show("Hiiii"); string message = (string)SerializationUtils.DeSerialization(allData); // добавляем полученное сообщение в текстовое поле this.Invoke(new MethodInvoker(() => { textBoxChat.Text = DateTime.Now.ToShortTimeString() + " " + message + "\r\n" + textBoxChat.Text; })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Entrance)) { users = (List <UserInfo>)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { lbUsers.Items.Clear(); foreach (UserInfo item in users) { lbUsers.Items.Add(item.UserNick + "(" + item.UserRating.ToString() + ")"); } })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Exit)) { users = (List <UserInfo>)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { lbUsers.Items.Clear(); foreach (UserInfo item in users) { lbUsers.Items.Add(item.UserNick + "(" + item.UserRating.ToString() + ")"); } })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Offer)) { if (offer) { return; } UserInfo userOpp = (UserInfo)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { if (MessageBox.Show("Игрок " + userOpp.UserNick + " предлагает игру." + "\n\rВступить в игру?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.Yes) { offer = true; UserInfo[] users1 = { userOpp, currUser }; byte[] message = SerializationUtils.Serialization( MessTypeUtil.MessageTypes[(int)MessTypeUtil.TypeMEnum.Accept], users1); SendData(message); } })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.NewGame)) { currentGame = (GInfo)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { offer = true; gameForm.Show(); gameForm.Refresh(); gameForm.SetOpp(currentGame.userOpp.UserNick); btnCancelGame.Enabled = false; btnCreateGame.Enabled = true; this.Hide(); })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Start)) { UserInfo userToMove = (UserInfo)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { if (currUser.UserNumber == userToMove.UserNumber) { gameForm.SetGame(true); } else { gameForm.SetGame(false); } })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Move)) { Move move = (Move)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { gameForm.AttackF(move); })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Attack)) { Move move = (Move)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { gameForm.MarkF(move); })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Win)) { int newR = (int)SerializationUtils.DeSerialization(allData); MessageBox.Show("Вы победили!"); this.Invoke(new MethodInvoker(() => { currUser.UserRating = newR; gameForm.Hide(); this.Show(); })); offer = false; currentGame = null; } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Lose)) { int newR = (int)SerializationUtils.DeSerialization(allData); MessageBox.Show("Вы проиграли!"); this.Invoke(new MethodInvoker(() => { currUser.UserRating = newR; gameForm.Hide(); this.Show(); })); offer = false; currentGame = null; } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.GMessage)) { GameMessage gMess = (GameMessage)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { gameForm.NewMessage(gMess.mess); })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.UpdateGames)) { openedGames = (List <GInfo>)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { lbGames.Items.Clear(); foreach (GInfo item in openedGames) { if (item.userOpp.UserNumber == currUser.UserNumber) { btnCreateGame.Enabled = false; openedGame = item; } lbGames.Items.Add(item.userOpp.UserNick); } })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.LoginError)) { this.Invoke(new MethodInvoker(() => { authForm.LoginError(); })); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.LoginAccomplish)) { //MessageBox.Show("Hiii"); currUser = (UserInfo)SerializationUtils.DeSerialization(allData); this.Invoke(new MethodInvoker(() => { lblUser.Text = "Игрок: " + currUser.UserNick; authForm.Hide(); this.Show(); })); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void Process() { stream = client.GetStream(); string code = string.Empty; byte[] data = new byte[64]; // буфер для получаемых данных while (true) { try { // получаем сообщение int bytes = 0; MemoryStream memStream = new MemoryStream(); do { bytes = stream.Read(data, 0, data.Length); memStream.Write(data, 0, bytes); }while (stream.DataAvailable); byte[] allData = memStream.ToArray(); if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Entrance)) { UserEntrance(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Exit)) { UserLogout(); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Message)) { MainMessage(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Offer)) { OfferGame(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Accept)) { AcceptGame(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.SetField)) { SetField(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Move)) { NewMove(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.GMessage)) { SendGameMessage(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.OpenGame)) { OpenNewGame(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Join)) { JoinToGame(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.CancelGame)) { CancelGame(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.LogIn)) { Login(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.SignUp)) { Register(allData); } else if (MessTypeUtil.MessageCheck(allData, MessTypeUtil.TypeMEnum.Lose)) { LeaveGame(allData); } } catch (ObjectDisposedException) { Console.WriteLine("соединение с " + User.UserNick + " разорвано"); break; } catch (Exception ex) { Console.WriteLine(ex.Message); break; } } }