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 }); }
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 }); }