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 GameClient() { LobbyMenu = new LobbyMenu(this); ServerInfo = new ClientsideServerInfo(); tcpClient = new TcpClient(); Character = new PlayerCharacter(); Character.Randomize(); }
void OnConnect(TcpServerConnection connection) { NetworkStream stream = connection.Socket.GetStream(); ClientRequest req = null; try { req = ClientRequest.ReceiveFrom(stream); } catch { return; } if (req.Purpose == RequestPurpose.Login) { if (FreeSlots > 0 && CurrentGame.Phase == GamePhase.Lobby) { ServersideClientInfo client = new ServersideClientInfo(); client.Connection = connection; client.PlayerName = (string)req.Data[0]; client.CharacterToString = (string)req.Data[1]; client.ClientID = Clients.Count; Clients.Add(client); ServerResponse toSend = new ServerResponse(); toSend.Purpose = ResponseType.LoginAccepted; toSend.Data = new object[] { client.ClientID, ClientsideServerInfo.FromServer(this) }; toSend.SendTo(stream); } else { ServerResponse toSend = new ServerResponse(); toSend.Purpose = ResponseType.ActionDenied; toSend.Data = new object[] { "" }; if (FreeSlots == 0) { toSend.Data[0] = "Server full"; } else { toSend.Data[0] = "Game in progress"; } toSend.SendTo(stream); server.Connections.Remove(connection); } } }
public ServerResponse ProcessRequest(ClientRequest req) { if (CurrentGame.Phase == GamePhase.Lobby) { if (req.Purpose == RequestPurpose.LobbyStatus) { this.Clients[req.ClientID] = (ServersideClientInfo)req.Data[0]; ServerResponse toSend = new ServerResponse(); toSend.Purpose = ResponseType.LobbyInfo; toSend.Data = new object[] { ClientsideServerInfo.FromServer(this) }; return(toSend); } } ServerResponse denied = new ServerResponse(); denied.Purpose = ResponseType.ActionDenied; denied.Data = new object[] { "" }; return(denied); }