예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
        }