Beispiel #1
0
        public MediusServerJoinGameResponse OnJoinGameRequest(MediusServerJoinGameRequest request)
        {
            ClientObject newClient;

            // If world is full then fail
            if (Clients.Count >= MAX_CLIENTS_PER_WORLD)
            {
                Logger.Warn($"Player attempted to join world {this} but there is no room!");
                return(new MediusServerJoinGameResponse()
                {
                    MessageID = request.MessageID,
                    Confirmation = MGCL_ERROR_CODE.MGCL_UNSUCCESSFUL
                });
            }

            // Client already added
            if (TryRegisterNewClientIndex(out var newClientIndex))
            {
                if (!Clients.TryAdd(newClientIndex, newClient = new ClientObject(request.ConnectInfo.SessionKey, this, newClientIndex)))
                {
                    UnregisterClientIndex(newClientIndex);
                    return(new MediusServerJoinGameResponse()
                    {
                        MessageID = request.MessageID,
                        Confirmation = MGCL_ERROR_CODE.MGCL_UNSUCCESSFUL
                    });
                }
                else
                {
                    newClient.OnDestroyed += (client) => { UnregisterClientIndex(client.DmeId); };
                }
            }
            else
            {
                Logger.Warn($"Player attempted to join world {this} but unable to add player!");
                return(new MediusServerJoinGameResponse()
                {
                    MessageID = request.MessageID,
                    Confirmation = MGCL_ERROR_CODE.MGCL_UNSUCCESSFUL
                });
            }

            // Add client to manager
            Program.Manager.AddClient(newClient);

            return(new MediusServerJoinGameResponse()
            {
                MessageID = request.MessageID,
                DmeClientIndex = newClient.DmeId,
                AccessKey = newClient.Token,
                Confirmation = MGCL_ERROR_CODE.MGCL_SUCCESS
            });
        }
Beispiel #2
0
        public MediusServerJoinGameResponse OnJoinGameRequest(MediusServerJoinGameRequest request)
        {
            ClientObject newClient;

            // If world is full then fail
            if (Clients.Count >= MAX_CLIENTS_PER_WORLD)
            {
                return(new MediusServerJoinGameResponse()
                {
                    MessageID = request.MessageID,
                    Confirmation = MGCL_ERROR_CODE.MGCL_UNSUCCESSFUL
                });
            }

            // Client already added
            var newClientIndex = GetFreeClientIndex();

            if (!Clients.TryAdd(newClientIndex, newClient = new ClientObject(request.ConnectInfo.SessionKey, this, newClientIndex)))
            {
                return(new MediusServerJoinGameResponse()
                {
                    MessageID = request.MessageID,
                    Confirmation = MGCL_ERROR_CODE.MGCL_UNSUCCESSFUL
                });
            }

            // Add client to manager
            Program.Manager.AddClient(newClient);

            return(new MediusServerJoinGameResponse()
            {
                MessageID = request.MessageID,
                DmeClientIndex = newClient.DmeId,
                AccessKey = newClient.Token,
                Confirmation = MGCL_ERROR_CODE.MGCL_SUCCESS
            });
        }