Exemple #1
0
        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);
            }
        }