protected virtual void OnGameServerFinalized() { if (gameSpawnTask.FinalizationPacket == null) { return; } var data = gameSpawnTask.FinalizationPacket.FinalizationData; if (!data.Has(MstDictKeys.ROOM_ID)) { BroadcastChatMessage("Game server finalized, but room ID cannot be found", true); return; } // Get room id from finalization data var roomId = data.AsInt(MstDictKeys.ROOM_ID); var room = Module.RoomsModule.GetRoom(roomId); if (room == null) { return; } this.lobbyRoom = room; GameIp = room.Options.RoomIp; GamePort = room.Options.RoomPort; room.OnDestroyedEvent += OnRoomDestroyed; }
/// <summary> /// Registers a room to the server /// </summary> /// <param name="peer"></param> /// <param name="options"></param> /// <returns></returns> public virtual RegisteredRoom RegisterRoom(IPeer peer, RoomOptions options) { var room = new RegisteredRoom(NextRoomId, peer, options); Dictionary <int, RegisteredRoom> peerRooms = peer.GetProperty((int)MstPeerPropertyCodes.RegisteredRooms) as Dictionary <int, RegisteredRoom>; if (peerRooms == null) { // If this is the first time creating a room // Save the dictionary peerRooms = new Dictionary <int, RegisteredRoom>(); peer.SetProperty((int)MstPeerPropertyCodes.RegisteredRooms, peerRooms); // Listen to disconnect event peer.OnPeerDisconnectedEvent += OnRegisteredPeerDisconnect; } // Add a new room to peer peerRooms[room.RoomId] = room; // Add the room to a list of all rooms roomsList[room.RoomId] = room; // Invoke the event OnRoomRegisteredEvent?.Invoke(room); return(room); }
public void OnRoomDestroyed(RegisteredRoom room) { room.OnDestroyedEvent -= OnRoomDestroyed; GameIp = ""; GamePort = -1; lobbyRoom = null; gameSpawnTask = null; State = Config.PlayAgainEnabled ? LobbyState.Preparations : LobbyState.GameOver; }
/// <summary> /// Unregisters a room from a server /// </summary> /// <param name="room"></param> public virtual void DestroyRoom(RegisteredRoom room) { var peer = room.Peer; if (peer != null) { var peerRooms = peer.GetProperty((int)MstPeerPropertyCodes.RegisteredRooms) as Dictionary <int, RegisteredRoom>; // Remove the room from peer if (peerRooms != null) { peerRooms.Remove(room.RoomId); } } // Remove the room from all rooms roomsList.Remove(room.RoomId); room.Destroy(); logger.Debug($"Room {room.RoomId} has been successfully destroyed"); // Invoke the event OnRoomDestroyedEvent?.Invoke(room); }
/// <summary> /// Returns list of properties of public room /// </summary> /// <param name="player"></param> /// <param name="room"></param> /// <param name="playerFilters"></param> /// <returns></returns> public virtual MstProperties GetPublicRoomOptions(IPeer player, RegisteredRoom room, MstProperties playerFilters) { return(room.Options.CustomOptions); }
/// <summary> /// There are times when you need to change registered room options. This method will help you :) /// </summary> /// <param name="room"></param> /// <param name="options"></param> public virtual void ChangeRoomOptions(RegisteredRoom room, RoomOptions options) { room.ChangeOptions(options); }