コード例 #1
0
        /**
         * 消息推送
         * **/
        public async Task SendMessage(string msgId, string from, string to, string message, string type)
        {
            type = type.Trim().ToLower();

            if (type == "text")
            {
                TextMessage txtMsg = new TextMessage();
                txtMsg.Id = new Guid(msgId);

                if (UserDictionary.ContainsKey(from))
                {
                    txtMsg.From = UserDictionary[from];     //UsersRepository.Load();
                }
                else
                {
                    var user = UsersRepository.Load(new Guid(from));
                    txtMsg.From = Mapper.Map <ChatMessageUser>(user);
                    UserDictionary.TryAdd(from, txtMsg.From);
                }

                if (UserDictionary.ContainsKey(to))
                {
                    txtMsg.To = UserDictionary[to];     //UsersRepository.Load();
                }
                else
                {
                    var user = UsersRepository.Load(new Guid(to));
                    txtMsg.To = Mapper.Map <ChatMessageUser>(user);
                    UserDictionary.TryAdd(to, txtMsg.To);
                }

                txtMsg.Type       = MessageType.Text;
                txtMsg.CreateTime = DateTime.Now;
                txtMsg.Text       = message;

                ChatMessages chatMsg = new ChatMessages();
                chatMsg.Id         = txtMsg.Id;
                chatMsg.From       = from;
                chatMsg.To         = to;
                chatMsg.Type       = MessageType.Text;
                chatMsg.CreateTime = txtMsg.CreateTime;
                chatMsg.Message    = txtMsg.ToJsonString();

                ChatMessagesRepository.Add(chatMsg);
                ChatMessagesRepository.SaveChanges();

                //如果对方在线,给对方发消息
                if (ClientByUserId.ContainsKey(to))
                {
                    var ToConnectionId = ClientByUserId[to];
                    await Clients.Client(ToConnectionId).SendAsync("ReceiveMessage", chatMsg.Message);
                }
                await Clients.Client(Context.ConnectionId).SendAsync("ReceiveMessage", chatMsg.Message);
            }
            //await Clients.All.SendAsync("ReceiveMessage", to, message);     //调用客户端方法
        }
コード例 #2
0
        private ChatController GetController(IEnumerable <ChatMessages> data)
        {
            var mockContext = new Mock <FriendyContext>();
            var mockSet     = Helpers.GetMockDbSet(data.ToList());

            mockContext.Setup(c => c.Set <ChatMessages>()).Returns(mockSet.Object);
            var mockWrapper = new Mock <RepositoryWrapper>(mockContext.Object);
            var rep         = new ChatMessagesRepository(mockContext.Object);

            mockWrapper.Setup(c => c.ChatMessages).Returns(rep);
            var service    = new ChatService(mockWrapper.Object, _imageSaver);
            var controller = new ChatController(_dialogNotifier, service);

            return(controller);
        }