Пример #1
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            switch (message.Type)
            {
            case EventType.PrefChange:
                PrefChange(message as PrefChange); break;

            case EventType.UserChange:
                UserChange(message as UserChange); break;

            case EventType.TeamJoin:
                TeamJoin(message as TeamJoin); break;

            case EventType.TeamPrefChange:
                TeamPrefChange(message as TeamPrefChange); break;

            case EventType.TeamDomainChange:
                TeamDomainChange(message as TeamDomainChange); break;

            case EventType.TeamRename:
                TeamRename(message as TeamRename); break;

            case EventType.EmailDomainChanged:
                EmailDomainChanged(message as EmailDomainChanged); break;
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #2
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            switch (message.Type)
            {
            case EventType.ChannelArchive:
                ChannelArchive(message as ChannelArchive); break;

            case EventType.ChannelCreated:
                ChannelCreated(message as ChannelCreated); break;

            case EventType.ChannelDeleted:
                ChannelDeleted(message as ChannelDeleted); break;

            case EventType.ChannelJoined:
                ChannelJoined(message as ChannelJoined); break;

            case EventType.ChannelLeft:
                ChannelLeft(message as ChannelLeft); break;

            case EventType.ChannelMarked:
                ChannelMarked(message as ChannelMarked); break;

            case EventType.ChannelRename:
                ChannelRename(message as ChannelRename); break;

            case EventType.ChannelUnarchive:
                ChannelUnarchive(message as ChannelUnarchive); break;
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #3
0
        private async void OfferMessageToHandlersAsync(EventMessageBase message, string originalMessage)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (this.MessageHandlers == null)
            {
                return;
            }

            var interestedHandlers = this.MessageHandlers.Where(h => SafelyHandles(h, message, originalMessage));

            foreach (var handler in interestedHandlers)
            {
                try
                {
                    this.Logger.Debug($"{handler.GetType().Name} handling: {message.Type}");
                    var result = await handler.HandleMessageAsync(message);

                    if (result == ProcessingChainResult.Stop)
                    {
                        break;
                    }
                }
                catch (Exception ex)
                {
                    this.Logger.Error($"{handler.GetType().Name} threw exception when handling message: {originalMessage}", ex);
                }
            }
        }
Пример #4
0
        public void OnMessage(EventMessageBase message)
        {
            if (message.eventMessageModel == EventMessageModel.eEventMessageModel_PLAY_ATTACK_STATE)
            {
                m_blood -= message.eventMessageAction;

                if (m_blood <= 0)
                {
                    m_stateMachine.ChangeState(MonsterDeathState.GetInstance());
                }
                else
                {
                    m_stateMachine.ChangeState(MonsterInjurtState.GetInstance());
                }

                Debug.Log("monster blood =" + m_blood.ToString());
            }
            else
            {
                if (message.eventMessageAction == (int)EnitityCommon.EnitityAction.ENITITY_ACTION_FIGHT_FINISH)
                {
                    m_stateMachine.ChangeState(MonsterIdelState.GetInstance());
                }
            }

            m_stateMachine.OnMessage(message);
        }
Пример #5
0
 public bool CanHandle(EventMessageBase message)
 {
     return(message.IsOneOf(EventType.ImClose,
                            EventType.ImCreated,
                            EventType.ImMarked,
                            EventType.ImOpen));
 }
Пример #6
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            switch (message.Type)
            {
            case EventType.GroupArchive:
                GroupArchive(message as GroupArchive); break;

            case EventType.GroupJoined:
                GroupJoined(message as GroupJoined); break;

            case EventType.GroupLeft:
                GroupLeft(message as GroupLeft); break;

            case EventType.GroupMarked:
                GroupMarked(message as GroupMarked); break;

            case EventType.GroupRename:
                GroupRename(message as GroupRename); break;

            case EventType.GroupUnarchive:
                GroupUnarchive(message as GroupUnarchive); break;
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #7
0
    void MonAttOver()
    {
        EventMessageBase message = new EventMessageBase();

        message.eventMessageAction = (int)EnitityCommon.EnitityAction.ENITITY_ACTION_FIGHT_FINISH;
        message.eventMessageModel  = EventMessageModel.eEventMessageModel_PLAY_STATE;
        CCearcueMgr.GetInstance().player.OnMessage(message);
    }
Пример #8
0
    void RunOver()
    {
        EventMessageBase message = new EventMessageBase();

        message.eventMessageAction = (int)EnitityCommon.EnitityAction.ENITITY_ACTION_MOVEOVER;
        message.eventMessageModel  = EventMessageModel.eEventMessageModel_PLAY_MOVE_STATE;
        CCearcueMgr.GetInstance().player.OnMessage(message);
    }
Пример #9
0
    void Hero_Injurt()
    {
        EventMessageBase message = new EventMessageBase();

        message.eventMessageAction = 5;
        message.eventMessageModel  = EventMessageModel.eEventMessageModel_PLAY_STATE;
        CCearcueMgr.GetInstance().player.OnMessage(message);
    }
Пример #10
0
    void Hero_Injurt()
    {
        EventMessageBase message = new EventMessageBase();

        message.eventMessageModel  = EventMessageModel.eEventMessageModel_PLAY_ATTACK_STATE;
        message.eventMessageAction = 20;
        CCearcueMgr.GetInstance().MonsterBeAttack(CCearcueMgr.GetInstance().player.GetAttackArea(), message);
    }
Пример #11
0
        public static bool IsOneOf(this EventMessageBase message, params EventType[] types)
        {
            if (message == null || types == null)
            {
                return(false);
            }

            return(types.Contains(message.Type));
        }
Пример #12
0
    void injurtOver()
    {
        EventMessageBase message = new EventMessageBase();

        message.eventMessageAction = (int)EnitityCommon.EnitityAction.ENITITY_ACTION_FIGHT_FINISH;
        message.eventMessageModel  = EventMessageModel.eEventMessageModel_MONSTER_STATE;
        message.modleId            = int.Parse(this.name);
        CCearcueMgr.GetInstance().MonsterOnMessage(message);
    }
Пример #13
0
 public bool CanHandle(EventMessageBase message)
 {
     return(message.IsOneOf(EventType.GroupArchive,
                            EventType.GroupJoined,
                            EventType.GroupLeft,
                            EventType.GroupMarked,
                            EventType.GroupRename,
                            EventType.GroupUnarchive));
 }
Пример #14
0
        private async void RunHandler(EventMessageBase message, Mock <IBotState> mockState)
        {
            var handler = new ChannelHandler();

            handler.BotState = mockState.Object;

            var result = await handler.HandleMessageAsync(message);

            mockState.Verify();
        }
Пример #15
0
 public void MonsterOnMessage(EventMessageBase message)
 {
     foreach (CMonster monster in m_monsterEntity)
     {
         if (monster.GetId() == message.modleId)
         {
             monster.OnMessage(message);
         }
     }
 }
Пример #16
0
 public bool CanHandle(EventMessageBase message)
 {
     return(message.IsOneOf(EventType.PrefChange,
                            EventType.UserChange,
                            EventType.TeamJoin,
                            EventType.TeamPrefChange,
                            EventType.TeamRename,
                            EventType.TeamDomainChange,
                            EventType.EmailDomainChanged));
 }
Пример #17
0
        public static bool MatchesText(this EventMessageBase message, string pattern, RegexOptions options = RegexOptions.None)
        {
            if (!IsActivePlainMessage(message))
            {
                return(false);
            }

            var messageBase = CastTo <MessageBase>(message);

            return(Regex.IsMatch(messageBase.Text, pattern, options));
        }
Пример #18
0
 public bool CanHandle(EventMessageBase message)
 {
     return(message.IsOneOf(EventType.ChannelArchive,
                            EventType.ChannelCreated,
                            EventType.ChannelDeleted,
                            EventType.ChannelJoined,
                            EventType.ChannelLeft,
                            EventType.ChannelMarked,
                            EventType.ChannelRename,
                            EventType.ChannelUnarchive));
 }
Пример #19
0
        public static T CastTo <T>(this EventMessageBase message) where T : EventMessageBase
        {
            var castMessage = message as T;

            if (castMessage == null)
            {
                throw new InvalidCastException($"message is not a valid {typeof(T).Name}");
            }

            return(castMessage);
        }
Пример #20
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            var presenceMessage = message.CastTo <PresenceChange>();

            var user = base.BotState.Users.FirstOrDefault(u => u.Id == presenceMessage.User);

            if (user != null)
            {
                user.Presence = presenceMessage.Presence;
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #21
0
        private bool SafelyHandles(IMessageHandler handler, EventMessageBase message, string originalMessage)
        {
            var handles = false;

            try
            {
                handles = handler.CanHandle(message);
            }
            catch (Exception ex)
            {
                this.Logger.Error($"{handler.GetType().Name} threw exception in CanHandle() with message: {originalMessage}", ex);
            }

            return(handles);
        }
Пример #22
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            var messageBase = message.CastTo <MessageBase>();

            var response = "pong";

            if (!message.IsIm(base.BotState))
            {
                response = $"<@{messageBase.User}>: {response}";
            }

            base.BotServices.SendMessage(messageBase.Channel, response);

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #23
0
 public void MonsterBeAttack(int[] area, EventMessageBase message)
 {
     foreach (int i in area)
     {
         foreach (CMonster monster in m_monsterEntity)
         {
             Debug.Log(NavigationMgr.GetInstance().GetGrid().GetCellIndex(monster.GetRenderObject().transform.localPosition).ToString() +
                       " =========== monster Index");
             Debug.Log(i.ToString() + " =========== attack Index");
             if (NavigationMgr.GetInstance().GetGrid().GetCellIndex(monster.GetRenderObject().transform.localPosition) == i)
             {
                 monster.OnMessage(message);
             }
         }
     }
 }
Пример #24
0
        public static bool IsActivePlainMessage(this EventMessageBase message)
        {
            if (message?.Type != EventType.Message)
            {
                return(false);
            }

            var messageBase = CastTo <MessageBase>(message);

            if (messageBase.Subtype != MessageSubType.PlainMessage)
            {
                return(false);
            }

            return(CastTo <PlainMessage>(message).Historic == false);
        }
Пример #25
0
        public override void Loop(string[] args)
        {
            if (EventSubscription.Queue.Any())
            {
                EventMessageBase item = EventSubscription.Queue.Dequeue();

                foreach (Action <EventMessageBase> action in EventSubscription.Subscriptions[item.Key])
                {
                    action(item);
                }
            }
            else
            {
                Thread.Sleep(500);
            }
        }
Пример #26
0
        public static bool IsToMe(this EventMessageBase message, IBotState botState)
        {
            if (!IsActivePlainMessage(message))
            {
                return(false);
            }

            if (IsIm(message, botState))
            {
                return(true);
            }

            var messageBase = CastTo <MessageBase>(message);

            return((messageBase.Text ?? "").StartsWith($"<@{botState.Self.Id}>:"));
        }
Пример #27
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            var rtmStartResponse = message.CastTo <RtmStartResponse>();

            base.BotState.Bots          = rtmStartResponse.Bots;
            base.BotState.CacheVersion  = rtmStartResponse.CacheVersion;
            base.BotState.Channels      = rtmStartResponse.Channels;
            base.BotState.Groups        = rtmStartResponse.Groups;
            base.BotState.Ims           = rtmStartResponse.Ims;
            base.BotState.LatestEventTs = rtmStartResponse.LatestEventTs;
            base.BotState.Self          = rtmStartResponse.Self;
            base.BotState.Team          = rtmStartResponse.Team;
            base.BotState.Users         = rtmStartResponse.Users;

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #28
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            var botModel = (message as BotAdded)?.Bot ?? (message as BotChanged)?.Bot;

            if (botModel != null)
            {
                var existingBotIndex = base.BotState.Bots.FindIndex(b => b.Id == botModel.Id);

                if (existingBotIndex >= 0)
                {
                    base.BotState.Bots.RemoveAt(existingBotIndex);
                }

                base.BotState.Bots.Add(botModel);
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }
Пример #29
0
        private EventMessageBase ParseMessageResponse(JObject jsonObject)
        {
            EventMessageBase eventMessage = null;
            var properties = jsonObject.Properties();

            if (properties.Any(p => p.Name == "ok") && properties.Any(p => p.Name == "reply_to"))
            {
                if ((bool)jsonObject["ok"])
                {
                    eventMessage = jsonObject.ToObject <MessageAck>(this.jsonSerializer);
                }
                else
                {
                    eventMessage = jsonObject.ToObject <MessageError>(this.jsonSerializer);
                }
            }

            return(eventMessage);
        }
Пример #30
0
        public Task <ProcessingChainResult> HandleMessageAsync(EventMessageBase message)
        {
            switch (message.Type)
            {
            case EventType.ImClose:
                ImClose(message as ImClose); break;

            case EventType.ImCreated:
                ImCreated(message as ImCreated); break;

            case EventType.ImMarked:
                ImMarked(message as ImMarked); break;

            case EventType.ImOpen:
                ImOpen(message as ImOpen); break;
            }

            return(Task.FromResult(ProcessingChainResult.Continue));
        }