示例#1
0
        public static CoolQRouteMessage Parse(CoolQMessageApi coolQMessageApi, Authority level = Authority.Public)
        {
            var coolQMessage = new CoolQRouteMessage
            {
                Message          = CoolQMessage.Parse(coolQMessageApi.Message),
                UserId           = coolQMessageApi.UserId.ToString(),
                MessageId        = coolQMessageApi.MessageId,
                CurrentAuthority = level,
                ReportMeta       = coolQMessageApi
            };

            switch (coolQMessageApi)
            {
            case CoolQPrivateMessageApi privateMsg:
                coolQMessage.MessageType = MessageType.Private;
                coolQMessage.Private     = privateMsg;
                break;

            case CoolQDiscussMessageApi discussMsg:
                coolQMessage.MessageType = MessageType.Discuss;
                coolQMessage.Discuss     = discussMsg;
                coolQMessage.DiscussId   = discussMsg.DiscussId.ToString();
                break;

            case CoolQGroupMessageApi groupMsg:
                coolQMessage.MessageType = MessageType.Group;
                coolQMessage.Group       = groupMsg;
                coolQMessage.GroupId     = groupMsg.GroupId.ToString();
                break;
            }

            return(coolQMessage);
        }
示例#2
0
        private void DispatchMessage(CoolQMessageApi coolQMessageApi)
        {
            CoolQIdentity cqIdentity;

            switch (coolQMessageApi)
            {
            case CoolQPrivateMessageApi privateMsg:
                cqIdentity = new CoolQIdentity(privateMsg.UserId, MessageType.Private);
                RunNext <CoolQPrivateMessageApi>(cqIdentity);
                break;

            case CoolQDiscussMessageApi discussMsg:
                cqIdentity = new CoolQIdentity(discussMsg.DiscussId, MessageType.Discuss);
                RunNext <CoolQDiscussMessageApi>(cqIdentity);
                break;

            case CoolQGroupMessageApi groupMsg:
                cqIdentity = new CoolQIdentity(groupMsg.GroupId, MessageType.Group);
                RunNext <CoolQGroupMessageApi>(cqIdentity);
                break;

            default:
                throw new ArgumentException();
            }

            SessionList[cqIdentity].LockMsg = false;

            void RunNext <T>(CoolQIdentity id) where T : CoolQMessageApi
            {
                while (SessionList[id].MsgQueue.TryDequeue(out object current))
                {
                    var currentMsg = (T)current;
                    try
                    {
                        CoolQRouteMessage coolQRouteMessage = CoolQRouteMessage.Parse(currentMsg);
                        HandleMessage(new CoolQScopeEventArgs
                        {
                            DisabledApplications = new List <ApplicationPlugin>(),
                            RouteMessage         = coolQRouteMessage
                        });
                    }
                    catch (Exception ex)
                    {
                        Logger.Exception(ex);
                    }
                }
            }
        }