public ClientObject(TcpClient tcpClient, ServerObject serverObject) { Id = Guid.NewGuid().ToString(); client = tcpClient; server = serverObject; serverObject.AddConnection(this); }
public ClientObject(TcpClient tcpClient, ServerObject server) { Id = Guid.NewGuid().ToString(); this.tcpClient = tcpClient; this.server = server; server.AddConnection(this); }
public ClientObject(TcpClient tcpClient, ServerObject serverObject) { id = 0; client = tcpClient; server = serverObject; serverObject.AddConnection(this); }
public void Process() { try { bool flag = false; do { Stream = client.GetStream(); // получаем имя пользователя string message = GetMessage(); if (message.Length >= 1) { userName = message.Substring(1); } else { return; } if (message[0] == '2') { if (server.SignUp(userName, this.Id)) { server.SignIn(userName, this.Id); message = "0"; flag = true; Console.WriteLine($"User {userName} enter in game"); } else { message = "-1"; } } else if (message[0] == '1') { if (server.SignIn(userName, this.Id)) { message = "0"; flag = true; Console.WriteLine($"User {userName} enter in game"); } else { message = "-1"; } } else { message = "not correct data"; } // посылаем сообщение о входе server.CallBack(message, this); }while (!flag); server.AddConnection(this); // в бесконечном цикле получаем сообщения от клиента while (true) { int k = 0; try { string message = GetMessage(); string msg = String.Format("{0}: {1}", userName, message); if (message != "") { Console.WriteLine(msg); } if (message == "exit") { Close(); } if (message == "" && k < 1) { message = String.Format("{0}: leave game 1", userName); Console.WriteLine(message); k++; k = 0; break; } //parsing messages //работа с получением списка активных пользователей if (message == "3") { string s = server.GetActiveUsers(); server.CallBack(s, this); } //получаем статистику пользователя else if (message == "4") { string[] str = userName.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string s = server.GetStatistic(str[0]); server.CallBack(s, this); } //приглашаем опонентав игру else if (message.Length > 1 && message[0] == '5') { //отправляем пользователю приглашение string uName = message.Substring(1); bool ans = server.PossibleInvite(uName); if (ans) { ClientObject client = server.clients.FirstOrDefault(c => c.GetName() == uName); if (client == null) { server.CallBack("-2", this); } else { if (client != null) { InviteInGame(client); } else { server.CallBack("-2", this); } } } else { server.CallBack("-2", this); } } else if (message.Contains("type")) { //получаем список задач заданного типа string s = message[4].ToString(); Game game = server.games.FirstOrDefault(c => c.player1 == this || c.player2 == this); if (game != null) { server.GetTasks(s, game); game.SendTasks(); } else { server.CallBack("er", this); } } //принятие приглашения else if (message.Contains("acp")) { AcceptInvating(message); } //отправляем ответы противникy else if (message.Length > 2 && message[0] == 'U' && message[1] == 'A') { Game game = server.games.FirstOrDefault(c => c.player1 == this || c.player2 == this); if (game != null) { ClientObject player = game.player1 == this ? game.player2 : game.player1; server.CallBack(message, player); } } //добавляем ответы в статистику else if (message.Length > 2 && message[0] == 'M' && message[1] == 'A') { string[] UsAns = ParseAnsw(message); server.AddStatistic(this.GetName(), idTasks, UsAns); } //удаляем поля InGame и Game else if (message == "remGame") { server.RemoveInGame(GetName()); try { Game g = server.games.FirstOrDefault(c => c.player1 == this || c.player2 == this); if (g != null) { server.games.Remove(g); server.DeleteGame(g.idGame); g = null; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } catch (Exception ex) { Console.WriteLine(ex.Message); string message = String.Format("{0}: leave game 2", userName); Console.WriteLine(message); server.CallBack("exit", this); Close(); break; } } } catch (Exception e) { Console.WriteLine(e.Message); } finally { // в случае выхода из цикла закрываем ресурсы server.RemoveConnection(this.Id); Close(); } }