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); }
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); } } } }