protected virtual void DestroyRoomRequestHandler(IIncomingMessage message) { var roomId = message.AsInt(); logger.Debug($"Client {message.Peer.Id} requested to destroy room server with id {roomId}"); if (!roomsList.TryGetValue(roomId, out RegisteredRoom room)) { logger.Debug($"But this room does not exist"); message.Respond("Room does not exist", ResponseStatus.Failed); return; } if (message.Peer != room.Peer) { logger.Debug($"But it is not the creator of the room"); message.Respond("You're not the creator of the room", ResponseStatus.Unauthorized); return; } DestroyRoom(room); logger.Debug($"Room {roomId} has been successfully destroyed"); message.Respond(ResponseStatus.Success); }
/// <summary> /// Handles a request from user to join a lobby /// </summary> /// <param name="message"></param> protected virtual void JoinLobbyHandler(IIncomingMessage message) { var lobbyUser = GetOrCreateLobbyUserPeerExtension(message.Peer); if (lobbyUser.CurrentLobby != null) { message.Respond("You're already in a lobby", ResponseStatus.Failed); return; } var lobbyId = message.AsInt(); lobbies.TryGetValue(lobbyId, out ILobby lobby); if (lobby == null) { message.Respond("Lobby was not found", ResponseStatus.Failed); return; } if (!lobby.AddPlayer(lobbyUser, out string error)) { message.Respond(error ?? "Failed to add player to lobby", ResponseStatus.Failed); return; } var data = lobby.GenerateLobbyData(lobbyUser); message.Respond(data, ResponseStatus.Success); }
protected virtual void GetCompletionDataRequestHandler(IIncomingMessage message) { var spawnId = message.AsInt(); if (!spawnTasksList.TryGetValue(spawnId, out SpawnTask task)) { message.Respond("Invalid request", ResponseStatus.Failed); return; } if (task.Requester != message.Peer) { message.Respond("You're not the requester", ResponseStatus.Unauthorized); return; } if (task.FinalizationPacket == null) { message.Respond("Task has no completion data", ResponseStatus.Failed); return; } // Respond with data (dictionary of strings) message.Respond(task.FinalizationPacket.FinalizationData.ToBytes(), ResponseStatus.Success); }
private void HandleLobbyStateChangeMsg(IIncomingMessage message) { var newState = (LobbyState)message.AsInt(); Data.LobbyState = newState; Listener?.OnLobbyStateChange(newState); }
protected virtual void SetProcessStartedRequestHandler(IIncomingMessage message) { var spawnId = message.AsInt(); if (spawnTasksList.TryGetValue(spawnId, out SpawnTask task)) { task.OnProcessStarted(); task.Spawner.OnProcessStarted(); } }
protected virtual void GetLobbyInfoMessageHandler(IIncomingMessage message) { var lobbyId = message.AsInt(); lobbies.TryGetValue(lobbyId, out ILobby lobby); if (lobby == null) { message.Respond("Lobby not found", ResponseStatus.Failed); return; } message.Respond(lobby.GenerateLobbyData(), ResponseStatus.Success); }
private void HandleLeftLobbyMsg(IIncomingMessage message) { var id = message.AsInt(); // Check the id in case there's something wrong with message order if (Id != id) { return; } HasLeft = true; Listener?.OnLobbyLeft(); }
/// <summary> /// Handles a request from user to leave a lobby /// </summary> /// <param name="message"></param> protected virtual void LeaveLobbyHandler(IIncomingMessage message) { var lobbyId = message.AsInt(); lobbies.TryGetValue(lobbyId, out ILobby lobby); var lobbiesExt = GetOrCreateLobbyUserPeerExtension(message.Peer); if (lobby != null) { lobby.RemovePlayer(lobbiesExt); } message.Respond(ResponseStatus.Success); }
/// <summary> /// Handles a request from client to get profile /// </summary> /// <param name="message"></param> protected virtual void ClientProfileRequestHandler(IIncomingMessage message) { var clientPropCount = message.AsInt(); var profileExt = message.Peer.GetExtension <ProfilePeerExtension>(); if (profileExt == null) { message.Respond("Profile not found", ResponseStatus.Failed); return; } profileExt.Profile.ClientPeer = message.Peer; if (!ignoreProfileMissmatchError && clientPropCount != profileExt.Profile.PropertyCount) { logger.Error(string.Format($"Client requested a profile with {clientPropCount} properties, but server " + $"constructed a profile with {profileExt.Profile.PropertyCount}. Make sure that you've changed the " + "profile factory on the ProfilesModule")); } message.Respond(profileExt.Profile.ToBytes(), ResponseStatus.Success); }
protected virtual void SetLobbyAsReadyMessageHandler(IIncomingMessage message) { var isReady = message.AsInt() > 0; var lobbiesExt = GetOrCreateLobbyUserPeerExtension(message.Peer); var lobby = lobbiesExt.CurrentLobby; if (lobby == null) { message.Respond("You're not in a lobby", ResponseStatus.Failed); return; } var member = lobby.GetMemberByExtension(lobbiesExt); if (member == null) { message.Respond("Invalid request", ResponseStatus.Failed); return; } lobby.SetReadyState(member, isReady); message.Respond(ResponseStatus.Success); }