/// <summary> /// Default access provider, which always confirms access requests /// </summary> /// <param name="accessCheckOptions"></param> /// <param name="callback"></param> public void DefaultAccessProvider(RoomAccessProviderCheck accessCheckOptions, RoomAccessProviderCallback callback) { callback.Invoke(new RoomAccessPacket() { RoomId = RoomId, RoomIp = Options.RoomIp, RoomPort = Options.RoomPort, CustomOptions = Options.CustomOptions, Token = Mst.Helper.CreateGuidString(), SceneName = SceneManager.GetActiveScene().name }, null); }
private void ProvideRoomAccessCheckHandler(IIncomingMessage message) { var provideRoomAccessCheckPacket = message.Deserialize(new ProvideRoomAccessCheckPacket()); var roomController = Mst.Server.Rooms.GetRoomController(provideRoomAccessCheckPacket.RoomId); if (roomController == null) { message.Respond($"There's no room controller with room id {provideRoomAccessCheckPacket.RoomId}", ResponseStatus.NotHandled); return; } var isProviderDone = false; var requester = new UsernameAndPeerIdPacket() { PeerId = provideRoomAccessCheckPacket.PeerId, Username = provideRoomAccessCheckPacket.Username }; // Create access provider check options var roomAccessProviderCheck = new RoomAccessProviderCheck() { PeerId = provideRoomAccessCheckPacket.PeerId, Username = provideRoomAccessCheckPacket.Username, CustomOptions = provideRoomAccessCheckPacket.CustomOptions }; // Invoke the access provider roomController.AccessProvider.Invoke(roomAccessProviderCheck, (access, error) => { // In case provider timed out if (isProviderDone) { return; } isProviderDone = true; if (access == null) { // If access is not provided message.Respond(string.IsNullOrEmpty(error) ? "" : error, ResponseStatus.Failed); return; } message.Respond(access, ResponseStatus.Success); if (Logger.IsLogging(LogLevel.Trace)) { Logger.Trace("Room controller gave address to peer " + provideRoomAccessCheckPacket.PeerId + ":" + access); } }); // Timeout the access provider MstTimer.WaitForSeconds(Mst.Server.Rooms.AccessProviderTimeout, () => { if (!isProviderDone) { isProviderDone = true; message.Respond("Timed out", ResponseStatus.Timeout); Logger.Error($"Access provider took longer than {Mst.Server.Rooms.AccessProviderTimeout} seconds to provide access. " + "If it's intended, increase the threshold at Msf.Server.Rooms.AccessProviderTimeout"); } }); }