示例#1
0
        public void SwitchToState(State newState)
        {
            switch (newState)
            {
            case State.Names:
                if (MatchState >= State.Names)
                {
                    return;
                }

                break;

            case State.Roles:
                if (MatchState != State.Names)
                {
                    return;
                }

                AssignPlayerRoles();
                break;
            }

            MatchState = newState;
            MatchListener.OnMatchSwitchState(MatchState);
        }
示例#2
0
        void PregameTimerThread()
        {
            MRKToSLogger.LogInfo("Pregame timer thread started");

            while (true)
            {
                if (PregameTimer.Enabled)
                {
                    MatchListener.OnPregameTimerStateChanged(new MRKToSTimerEvent(PregameTimer, MRKTosTimerEventState.Updated));

                    if (PregameTimer.RelativeCurrent <= 0)
                    {
                        MRKToSLogger.LogInfo("Pregame timer ended");

                        Players = new List <MRKToSPlayer>();
                        foreach (MRKToSUser user in m_QueuedUsers)
                        {
                            Players.Add(new MRKToSPlayer(user, this, Players.Count + 1));
                        }

                        SwitchToState(State.Names);
                        break;
                    }
                }

                Thread.Sleep(200); // i like to sleep for 200 mils
            }
        }
示例#3
0
        /// <summary>
        /// Add a user to the queue
        /// </summary>
        /// <param name="user"></param>
        public bool QueueUser(MRKToSUser user)
        {
            if (MatchState != State.Waiting)
            {
                MRKToSLogger.LogError($"Can not queue {user.Username} to the match, match has already started or is still idle");
                return(false);
            }

            if (FindQueuedUser(user.Username) != null)
            {
                MRKToSLogger.LogWarning($"User {user.Username} is already queued");
                return(false);
            }

            if (m_QueuedUsers.Count >= Settings.MaximumPlayerCount)
            {
                MRKToSLogger.LogWarning($"Can not que {user.Username} to the match, match has maximum player count");
                return(false);
            }

            m_QueuedUsers.Add(user);

            MRKToSLogger.LogInfo($"User {user.Username} has been added to the queue");
            LogQueueCount();

            MatchListener.OnQueueUserAdded(user);

            UpdatePregame();
            return(true);
        }
示例#4
0
        /// <summary>
        /// Updates the pregame counter
        /// </summary>
        void UpdatePregame()
        {
            if (Settings.MinimumPlayerCount > m_QueuedUsers.Count)
            {
                if (PregameTimer.Enabled)
                {
                    //disable timer
                    PregameTimer.Stop();

                    MatchListener.OnPregameTimerStateChanged(new MRKToSTimerEvent(PregameTimer, MRKTosTimerEventState.Stopped));

                    MRKToSLogger.LogInfo("Pregame timer state: start -> stop due to 0");
                }
            }
            else if (m_QueuedUsers.Count >= Settings.MinimumPlayerCount)
            {
                if (!PregameTimer.Enabled)
                {
                    //start timer
                    PregameTimer.Max = Settings.MinimumStartTime * 1000;
                    PregameTimer.Start();

                    MatchListener.OnPregameTimerStateChanged(new MRKToSTimerEvent(PregameTimer, MRKTosTimerEventState.Started));

                    MRKToSLogger.LogInfo("Pregame timer state: stop -> start due to 1");
                }

                if (m_QueuedUsers.Count == Settings.MaximumPlayerCount)
                {
                    if (PregameTimer.Max == Settings.MinimumStartTime * 1000)
                    {
                        PregameTimer.Max = Settings.MaximumStartTime * 1000;
                        PregameTimer.Reset();

                        MatchListener.OnPregameTimerStateChanged(new MRKToSTimerEvent(PregameTimer, MRKTosTimerEventState.Changed));

                        MRKToSLogger.LogInfo("Pregame timer state: reset due to 2");
                    }
                }
                else
                {
                    if (PregameTimer.Max == Settings.MaximumStartTime * 1000)
                    {
                        PregameTimer.Max = Settings.MinimumStartTime * 1000;
                        PregameTimer.Reset();

                        MatchListener.OnPregameTimerStateChanged(new MRKToSTimerEvent(PregameTimer, MRKTosTimerEventState.Changed));

                        MRKToSLogger.LogInfo("Pregame timer state: reset due to 3");
                    }
                }
            }

            if (m_PregameTimerThread == null)
            {
                (m_PregameTimerThread = new Thread(PregameTimerThread)).Start();
            }
        }
示例#5
0
        /// <summary>
        /// Assings roles for players
        /// </summary>
        void AssignPlayerRoles()
        {
            Random rnd = new Random();

            List <MRKToSPlayer> unassigned = new List <MRKToSPlayer>();

            foreach (MRKToSPlayer player in Players)
            {
                unassigned.Add(player);
            }

            foreach (MRKToSRoleID role in Settings.Gamemode.RoleList)
            {
                Dictionary <MRKToSPlayer, RoleAssignmentContext> ctx = new Dictionary <MRKToSPlayer, RoleAssignmentContext>();
                int   totalLots = 1;
                int[] playerMap = new int[unassigned.Count];

                int idx = 0;
                foreach (MRKToSPlayer player in unassigned)
                {
                    MRKToSScroll scroll     = player.GetScroll(role);
                    int          playerLots = 10 * (scroll.Count > 0 ? Settings.ScrollMultiplier : 1);

                    playerMap[idx++] = totalLots;

                    totalLots += playerLots;

                    ctx[player] = new RoleAssignmentContext {
                        Lots   = playerLots,
                        Scroll = scroll
                    };
                }

                int num = rnd.Next(totalLots) + 1;
                int playerIdxForRole = -1;
                for (int i = unassigned.Count - 1; i > -1; i--)
                {
                    if (num > playerMap[i])
                    {
                        playerIdxForRole = i;
                        break;
                    }
                }

                MRKToSPlayer __player = unassigned[playerIdxForRole];
                if (ctx[__player].Scroll.Count > 0)
                {
                    ctx[__player].Scroll.Count--;
                }

                __player.Role = (MRKToSRole)Activator.CreateInstance(ms_RoleAssignmentMap[role], __player);
                unassigned.Remove(__player);
            }

            MatchListener.OnMatchRolesAssigned();
        }
        public void TestSensorQuery()
        {
            var configuration = Setup();

            configuration.EngineDefaults.ViewResourcesConfig.IsAllowMultipleExpiryPolicies = true;
            var epService = EPServiceProviderManager.GetDefaultProvider(configuration);

            epService.Initialize();
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.StartTest(epService, GetType(), GetType().FullName);
            }
            var listener = new MatchListener();

            var stmtString =
                "SELECT max(high.type) as type, \n" +
                " max(high.measurement) as highMeasurement, max(high.confidence) as confidenceOfHigh, max(high.device) as deviceOfHigh\n" +
                ",min(low.measurement) as lowMeasurement, min(low.confidence) as confidenceOfLow, min(low.device) as deviceOfLow\n" +
                "FROM\n" +
                " Sensor.std:groupwin(type).win:time(1 hour).std:unique(device).ext:sort(1, measurement desc) as high " +
                ",Sensor.std:groupwin(type).win:time(1 hour).std:unique(device).ext:sort(1, measurement asc) as low ";

            var stmt = epService.EPAdministrator.CreateEPL(stmtString);

            log.Info(stmtString);
            stmt.Events += listener.Update;

            var            runtime = epService.EPRuntime;
            IList <Sensor> events  = new List <Sensor>();

            events.Add(new Sensor("Temperature", "Device1", 68.0, 96.5));
            events.Add(new Sensor("Temperature", "Device2", 65.0, 98.5));
            events.Add(new Sensor("Temperature", "Device1", 62.0, 95.3));
            events.Add(new Sensor("Temperature", "Device2", 71.3, 99.3));
            foreach (var theEvent in events)
            {
                LogEvent(theEvent);
                runtime.SendEvent(theEvent);
            }
            var lastEvent = listener.LastEventBean;

            Assert.IsTrue(lastEvent != null);
            Assert.AreEqual(62.0, lastEvent.Get("lowMeasurement"));
            Assert.AreEqual("Device1", lastEvent.Get("deviceOfLow"));
            Assert.AreEqual(95.3, lastEvent.Get("confidenceOfLow"));
            Assert.AreEqual(71.3, lastEvent.Get("highMeasurement"));
            Assert.AreEqual("Device2", lastEvent.Get("deviceOfHigh"));
            Assert.AreEqual(99.3, lastEvent.Get("confidenceOfHigh"));

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.EndTest();
            }
            epService.Dispose();
        }
        public void TestSensorQuery()
        {
            Configuration configuration = GetConfiguration();

            configuration.EngineDefaults.ViewResourcesConfig.IsAllowMultipleExpiryPolicies = true;
            EPServiceProvider epService = EPServiceProviderManager.GetProvider("testSensorQuery", configuration);

            epService.Initialize();
            MatchListener listener = new MatchListener();

            String stmtString =
                "SELECT max(high.type) as type, \n" +
                " max(high.measurement) as highMeasurement, max(high.confidence) as confidenceOfHigh, max(high.device) as deviceOfHigh\n" +
                ",min(low.measurement) as lowMeasurement, min(low.confidence) as confidenceOfLow, min(low.device) as deviceOfLow\n" +
                "FROM\n" +
                " Sensor.std:groupwin(type).win:time(1 hour).std:unique(device).ext:sort(1, measurement desc) as high " +
                ",Sensor.std:groupwin(type).win:time(1 hour).std:unique(device).ext:sort(1, measurement asc) as low ";

            EPStatement stmt = epService.EPAdministrator.CreateEPL(stmtString);

            Log.Info(stmtString);
            stmt.Events += (sender, args) => listener.Update(args.NewEvents, args.OldEvents);

            EPRuntime     runtime = epService.EPRuntime;
            List <Sensor> events  = new List <Sensor>();

            events.Add(new Sensor("Temperature", "Device1", 68.0, 96.5));
            events.Add(new Sensor("Temperature", "Device2", 65.0, 98.5));
            events.Add(new Sensor("Temperature", "Device1", 62.0, 95.3));
            events.Add(new Sensor("Temperature", "Device2", 71.3, 99.3));
            foreach (Sensor theEvent in events)
            {
                LogEvent(theEvent);
                runtime.SendEvent(theEvent);
            }
            EventBean lastEvent = listener.LastEventBean;

            Assert.IsTrue(lastEvent != null);
            Assert.AreEqual(62.0, lastEvent.Get("lowMeasurement"));
            Assert.AreEqual("Device1", lastEvent.Get("deviceOfLow"));
            Assert.AreEqual(95.3, lastEvent.Get("confidenceOfLow"));
            Assert.AreEqual(71.3, lastEvent.Get("highMeasurement"));
            Assert.AreEqual("Device2", lastEvent.Get("deviceOfHigh"));
            Assert.AreEqual(99.3, lastEvent.Get("confidenceOfHigh"));

            epService.Dispose();
        }
示例#8
0
        public override void Run(EPServiceProvider epService)
        {
            var listener = new MatchListener();

            string stmtString =
                "SELECT max(high.type) as type, \n" +
                " max(high.measurement) as highMeasurement, max(high.confidence) as confidenceOfHigh, max(high.device) as deviceOfHigh\n" +
                ",min(low.measurement) as lowMeasurement, min(low.confidence) as confidenceOfLow, min(low.device) as deviceOfLow\n" +
                "FROM\n" +
                " Sensor#groupwin(type)#time(1 hour)#unique(device)#sort(1, measurement desc) as high " +
                ",Sensor#groupwin(type)#time(1 hour)#unique(device)#sort(1, measurement asc) as low ";

            EPStatement stmt = epService.EPAdministrator.CreateEPL(stmtString);

            Log.Info(stmtString);
            stmt.Events += listener.Update;

            EPRuntime runtime = epService.EPRuntime;
            var       events  = new List <Sensor>();

            events.Add(new Sensor("Temperature", "Device1", 68.0, 96.5));
            events.Add(new Sensor("Temperature", "Device2", 65.0, 98.5));
            events.Add(new Sensor("Temperature", "Device1", 62.0, 95.3));
            events.Add(new Sensor("Temperature", "Device2", 71.3, 99.3));
            foreach (Sensor theEvent in events)
            {
                runtime.SendEvent(theEvent);
            }
            EventBean lastEvent = listener.LastEventBean;

            Assert.IsTrue(lastEvent != null);
            Assert.AreEqual(62.0, lastEvent.Get("lowMeasurement"));
            Assert.AreEqual("Device1", lastEvent.Get("deviceOfLow"));
            Assert.AreEqual(95.3, lastEvent.Get("confidenceOfLow"));
            Assert.AreEqual(71.3, lastEvent.Get("highMeasurement"));
            Assert.AreEqual("Device2", lastEvent.Get("deviceOfHigh"));
            Assert.AreEqual(99.3, lastEvent.Get("confidenceOfHigh"));
        }
示例#9
0
        /// <summary>
        /// Remove a user from the queue
        /// </summary>
        /// <param name="user"></param>
        public bool DequeueUser(MRKToSUser user)
        {
            if (MatchState != State.Waiting)
            {
                MRKToSLogger.LogError($"Can not dequeue {user.Username} to the match, match has already started or is still idle");
                return(false);
            }

            if (FindQueuedUser(user.Username) == null)
            {
                MRKToSLogger.LogWarning($"User {user.Username} is not queued");
                return(false);
            }

            m_QueuedUsers.Remove(user);

            MRKToSLogger.LogInfo($"User {user.Username} has been removed from the queue");
            LogQueueCount();

            MatchListener.OnQueueUserRemoved(user);

            UpdatePregame();
            return(true);
        }
示例#10
0
        public void OnMessageReceived(BacktoryListener backtoryListener)
        {
            MatchListener matchListener = (MatchListener)backtoryListener;

            matchListener.OnJoinedWebhookMessage(this);
        }
 public void SetMatchListener(MatchListener matchListener)
 {
     backtoryMatchApi.SetMatchListener(matchListener);
 }
        public void OnMessageReceived(BacktoryListener backtoryListener)
        {
            MatchListener matchListener = (MatchListener)backtoryListener;

            matchListener.OnMatchChatMessage(this);
        }
 public void SetMatchListener(MatchListener matchListener)
 {
     this.MatchListener = matchListener;
 }