diff --git a/zsirozas/Form1.cs b/zsirozas/Form1.cs index abdc57f2dd2349f8aec82714b5cda0b28c6d663b..0f9e320e487670529d04c6cabd0702d1b42fe9a0 100644 --- a/zsirozas/Form1.cs +++ b/zsirozas/Form1.cs @@ -210,6 +210,7 @@ namespace zsirozas { var rooms = client.remoteServer.ListRooms(); var roomInfos = new Dictionary<string, RoomInfo>(); + listBoxRooms.Items.Clear(); foreach (var roomID in rooms) { listBoxRooms.Items.Add(roomID); @@ -217,6 +218,7 @@ namespace zsirozas } var users = client.remoteServer.ListUsers(); var userInfos = new Dictionary<string, UserInfo>(); + listBoxUsers.Items.Clear(); foreach (var userID in users) { listBoxUsers.Items.Add(userID); @@ -327,7 +329,7 @@ namespace zsirozas private void Form1_FormClosing(object sender, FormClosingEventArgs e) { - if (client.server != null) + if (client.serverAddr != null) { try { diff --git a/zsirozas/GameClient.cs b/zsirozas/GameClient.cs index b0ff7fa4e9e27c96d493d3c6f99b68887883e480..53c0008e173282f82608f676217bffc2c07d3e50 100644 --- a/zsirozas/GameClient.cs +++ b/zsirozas/GameClient.cs @@ -58,18 +58,16 @@ namespace zsirozas { if (pingServer(server_ip, server_port)) { - server = new IPEndPoint(IPAddress.Parse(server_ip), server_port); + serverAddr = new IPEndPoint(IPAddress.Parse(server_ip), server_port); try { - remoteServer = new RawTcpRemoteServer(server.Address, server.Port); - incomingListener = new TcpListener(IPAddress.Any, serverIncoming); - incomingListener.Start(); + remoteServer = new RawTcpRemoteServer(serverAddr.Address, serverAddr.Port, this, IPAddress.Any, serverIncoming); + //if (SendRequest(ServerAction.Login, nickname + "\n" + ((IPEndPoint)incomingListener.Server.LocalEndPoint).Port)) - userID = remoteServer.CreateUser(nickname, ConnectionType.RawTCP, ((IPEndPoint)incomingListener.Server.LocalEndPoint).Port); + //TODO: ez így ronda! + userID = remoteServer.CreateUser(nickname, ConnectionType.RawTCP, ((IPEndPoint) (remoteServer as RawTcpRemoteServer).incomingListener.Server.LocalEndPoint).Port); if (!string.IsNullOrEmpty(userID)) { - messageStream = incomingListener.AcceptTcpClient().GetStream(); - new Thread(ListenForServer) { IsBackground = true }.Start(); if (remoteServer.ServerInfo().bigRoom) { roomID = remoteServer.ListRooms()[0]; @@ -90,17 +88,15 @@ namespace zsirozas // generally talking to server // + public event EventHandler<string> HandleServerError = (sender, e) => { }; - public IPEndPoint server; + public IPEndPoint serverAddr; public string userID; public string roomID; public string gameID; public int playerIDX; - TcpListener incomingListener = null; - Stream messageStream = null; - public IServerApiProvider remoteServer; public bool StartGame() @@ -123,89 +119,6 @@ namespace zsirozas remoteServer.JoinRoom(userID, roomID); } - void ListenForServer() - { - using (var sr = new StreamReader(messageStream)) - { - while (true) - { - try - { - ParseNextMessage(sr); - } - catch (Exception ex) - { - //TODO: rossz debug módszer.... - HandleServerError(this, ex.Message); - System.Diagnostics.Debugger.Break(); - return; - } - } - } - //using (var sr = new StreamReader(messageStream)) - //{ - // string line = ""; - // while (true) - // { - // try - // { - // while (string.IsNullOrEmpty(line)) - // { - // line = sr.ReadLine(); - // } - // var @event = (ServerEvent)Enum.Parse(typeof(ServerEvent), line); - // switch (@event) - // { - // case ServerEvent.GameEvent: - // //ToODO: validálni - // line = sr.ReadLine(); - // GameEvent gameEvent; - // Enum.TryParse<GameEvent>(line, out gameEvent); - // switch (gameEvent) - // { - // case GameEvent.NewTurn: - // gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine()); - - // //ToODO: ezt majd valahol máshol nézegetni... - // playerIDX = Array.IndexOf<string>(gameState.playersByOrder, userID); - - // gameStateCanged(this, gameEvent); - // //SendRequest(ServerAction.GameAction, PlayerAction.GetCards + "\n0"); - // remoteServer.GameAction(gameID, userID, PlayerAction.GetCards, 0); cardsChanged(); - // break; - // case GameEvent.CardAction: - // gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine()); - // gameStateCanged(this, gameEvent); - // break; - // case GameEvent.GameOver: - // string msg = sr.ReadLine(); - // var dummy = new { ID = "", score = 0 }; - // var scores = new JavaScriptSerializer() - // .Deserialize<IEnumerable<object>>(msg) - // .Select((arg) => CastByExample(dummy, arg)); - // msg = string.Join("\n", scores.Select((arg) => arg.ID + "\t" + arg.score).ToArray()); - // gameOver(this, "A játéknak vége!\n" + msg); - // break; - // default: - // break; - // } - // break; - // case ServerEvent.Logout: - // return; - - // default: - // break; - // } - // } - // catch (Exception) - // { - // line = sr.ReadLine(); - // continue; - // } - // } - //} - } - public void SimpleNotify(ServerEvent @event, string param0) { diff --git a/zsirozas/RawTcpTransport.cs b/zsirozas/RawTcpTransport.cs index 5adf0fb7ef1dc3a0a8e9e8898f983f6e0c84d451..f3c3d40d411b3e40bb8e33ee5b0cb61f76162092 100644 --- a/zsirozas/RawTcpTransport.cs +++ b/zsirozas/RawTcpTransport.cs @@ -5,6 +5,7 @@ using System.IO; using System.Net; using System.Web.Script.Serialization; using System.Linq; +using System.Threading; namespace zsirozas { @@ -77,12 +78,105 @@ namespace zsirozas /// </summary> class RawTcpRemoteServer : IServerApiProvider { - public RawTcpRemoteServer(IPAddress IP, int port) + + IAppClient client; + + //incoming message loop + void ListenForServer() + { + using (var sr = new StreamReader(messageStream)) + { + while (true) + { + try + { + client.ParseNextMessage(sr); + } + catch (Exception ex) + { + Console.WriteLine(ex.StackTrace); + System.Diagnostics.Debugger.Break(); + return; + } + } + } + //using (var sr = new StreamReader(messageStream)) + //{ + // string line = ""; + // while (true) + // { + // try + // { + // while (string.IsNullOrEmpty(line)) + // { + // line = sr.ReadLine(); + // } + // var @event = (ServerEvent)Enum.Parse(typeof(ServerEvent), line); + // switch (@event) + // { + // case ServerEvent.GameEvent: + // //ToODO: validálni + // line = sr.ReadLine(); + // GameEvent gameEvent; + // Enum.TryParse<GameEvent>(line, out gameEvent); + // switch (gameEvent) + // { + // case GameEvent.NewTurn: + // gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine()); + + // //ToODO: ezt majd valahol máshol nézegetni... + // playerIDX = Array.IndexOf<string>(gameState.playersByOrder, userID); + + // gameStateCanged(this, gameEvent); + // //SendRequest(ServerAction.GameAction, PlayerAction.GetCards + "\n0"); + // remoteServer.GameAction(gameID, userID, PlayerAction.GetCards, 0); cardsChanged(); + // break; + // case GameEvent.CardAction: + // gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine()); + // gameStateCanged(this, gameEvent); + // break; + // case GameEvent.GameOver: + // string msg = sr.ReadLine(); + // var dummy = new { ID = "", score = 0 }; + // var scores = new JavaScriptSerializer() + // .Deserialize<IEnumerable<object>>(msg) + // .Select((arg) => CastByExample(dummy, arg)); + // msg = string.Join("\n", scores.Select((arg) => arg.ID + "\t" + arg.score).ToArray()); + // gameOver(this, "A játéknak vége!\n" + msg); + // break; + // default: + // break; + // } + // break; + // case ServerEvent.Logout: + // return; + + // default: + // break; + // } + // } + // catch (Exception) + // { + // line = sr.ReadLine(); + // continue; + // } + // } + //} + } + + + + public RawTcpRemoteServer(IPAddress serverIP, int serverPort, IAppClient client, IPAddress listenIP, int listenPort) { - server = new IPEndPoint(IP, port); + this.client = client; + server = new IPEndPoint(serverIP, serverPort); + incomingListener = new TcpListener(listenIP, listenPort); + incomingListener.Start(); + } public IPEndPoint server; - + public TcpListener incomingListener; + public Stream messageStream = null; // //Implemetation of the server API // @@ -146,6 +240,12 @@ namespace zsirozas userID = sr.ReadLine(); } } + + //initialize the incoming message loop + messageStream = incomingListener.AcceptTcpClient().GetStream(); + new Thread(ListenForServer) { IsBackground = true }.Start(); + + return userID; } } @@ -216,7 +316,7 @@ namespace zsirozas throw new ServerErrorException(status); } status = sr.ReadLine(); - return status.Split(' ').ToArray(); + return status.Split(' ').Where(s => !string.IsNullOrEmpty(s)).ToArray(); } } } diff --git a/zsirozas/SignalR-Transport.cs b/zsirozas/SignalR-Transport.cs index 7fc04cef1529805a403f423abcf130f05a50f843..03adcf523541f266047f0bf7b12e670472e07821 100644 --- a/zsirozas/SignalR-Transport.cs +++ b/zsirozas/SignalR-Transport.cs @@ -17,7 +17,7 @@ namespace zsirozas { this.client = client; hub = new HubConnection(server_url).CreateHubProxy(nameof(SignalRServerHub)); - //proxy calls from srver + //proxy calls from server hub.On<ServerEvent, string>(nameof(client.SimpleNotify), client.SimpleNotify); hub.On<GameEvent, string>(nameof(client.InGameNotify), client.InGameNotify); }