/// <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) { // Create the object var room = new RegisteredRoom(GenerateRoomId(), peer, options); var peerRooms = peer.GetProperty((int)PeerPropertyKeys.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)PeerPropertyKeys.RegisteredRooms, peerRooms); // Listen to disconnect event peer.Disconnected += OnRegisteredPeerDisconnect; } // Add a new room to peer peerRooms[room.RoomId] = room; // Add the room to a list of all rooms _rooms[room.RoomId] = room; // Invoke the event RoomRegistered?.Invoke(room); return(room); }
/// <summary> /// Sends a request to register a room to master server /// </summary> public void RegisterRoom(RoomOptions options, RoomCreationCallback callback) { if (!Connection.IsConnected) { callback.Invoke(null, "Not connected"); return; } Connection.SendMessage((short)OpCodes.RegisterRoom, options, (status, response) => { if (status != ResponseStatus.Success) { // Failed to register room callback.Invoke(null, response.AsString("Unknown Error")); return; } var roomId = response.AsInt(); var controller = new RoomController(this, roomId, Connection, options); // Save the reference _localCreatedRooms[roomId] = controller; callback.Invoke(controller, null); // Invoke event RoomRegistered?.Invoke(controller); }); }