void Update(object o) { if (LoggedIn && Connected) { NetworkStream stream = tcpClient.GetStream(); ClientRequest req = new ClientRequest(this.LocalID); if (ServerInfo.GamePhase == GamePhase.Lobby) { Stopwatch stopky = new Stopwatch(); stopky.Start(); req.Purpose = RequestPurpose.LobbyStatus; req.Data = new object[] { ServersideClientInfo.FromClient(this) }; req.SendTo(stream); ServerResponse resp = ServerResponse.ReceiveFrom(stream); if (resp.Purpose == ResponseType.LobbyInfo) { this.ServerInfo = (ClientsideServerInfo)resp.Data[0]; this.LobbyMenu.UpdateItems(); this.LobbyMenu.Draw(); } else { throw new NotImplementedException(); } stopky.Stop(); this.Ping = (int)stopky.ElapsedMilliseconds; } } }
void OnConnect(IAsyncResult result) { work++; if (tcpClient.Connected) { NetworkStream stream = tcpClient.GetStream(); ClientRequest req = new ClientRequest(-1); req.Purpose = RequestPurpose.Login; req.Data = new object[] { Character.Name, Character.ToString() }; req.SendTo(stream); ServerResponse resp = ServerResponse.ReceiveFrom(stream); if (resp.Purpose == ResponseType.LoginAccepted) { this.LocalID = (int)resp.Data[0]; this.ServerInfo = (ClientsideServerInfo)resp.Data[1]; LoggedIn = true; } else // resp.Purpose == ResponseType.ActionDenied; { this.ErrorMessage = (string)resp.Data[0]; } } work--; }
public void Send(ClientRequest req) { NetworkStream stream = tcpClient.GetStream(); req.SendTo(stream); ServerResponse resp = ServerResponse.ReceiveFrom(stream); ProcessResponse(resp); }