private void HandleProvideRoomAccessCheck(IIncommingMessage message) { var data = message.Deserialize(new RoomAccessProvideCheckPacket()); var roomController = Msf.Server.Rooms.GetRoomController(data.RoomId); if (roomController == null) { message.Respond("There's no room controller with room id " + data.RoomId, ResponseStatus.NotHandled); return; } var accessProvider = roomController._accessProvider ?? DefaultAccessProvider; var isProviderDone = false; var requester = new UsernameAndPeerIdPacket() { PeerId = data.PeerId, Username = data.Username }; // Invoke the access provider accessProvider.Invoke(requester, (access, error) => { // In case provider timed out if (isProviderDone) { return; } isProviderDone = true; if (access == null) { // If access is not provided message.Respond(error ?? "", ResponseStatus.Failed); return; } message.Respond(access, ResponseStatus.Success); if (Logger.IsLogging(LogLevel.Trace)) { Logger.Trace("Room controller gave address to peer " + data.PeerId + ":" + access); } }); // Timeout the access provider BTimer.AfterSeconds(Msf.Server.Rooms.AccessProviderTimeout, () => { if (!isProviderDone) { isProviderDone = true; message.Respond("Timed out", ResponseStatus.Timeout); Logger.Error("Access provider took longer than " + Msf.Server.Rooms.AccessProviderTimeout + " seconds to provide access. " + "If it's intended, increase the threshold at Msf.Server.Rooms.AccessProviderTimeout"); } }); }
public override void StartServer(int port) { if (IsRunning) { return; } Logger.Debug("Starting on port: " + port + "..."); base.StartServer(port); Logger.Info("Started on port: " + port); // Notify about uninitialized modules var uninitializedModules = GetUninitializedModules(); if (uninitializedModules.Count > 0) { Logger.Warn("Some of the Master Server modules failed to initialize: \n" + string.Join(" \n", uninitializedModules.Select(m => m.GetType().ToString()).ToArray())); } // Notify about initialized modules if (Logger.IsLogging(LogLevel.Debug)) { Logger.Warn("Successfully initialized modules: \n" + string.Join(" \n", GetInitializedModules().Select(m => m.GetType().ToString()).ToArray())); } OnStarted(); IsMasterRunning = IsRunning; // Invoke the event if (MasterStarted != null) { MasterStarted.Invoke(this); } }