Beispiel #1
0
        public async Task <IActionResult> SendMessage([FromBody] SendMessageRequest messageRequest,
                                                      [FromRoute] int groupId)
        {
            var userId  = Request.GetUserId();
            var users   = _groupFacade.GetGroup(groupId, userId).GroupMemberInfo;
            var userIds = new List <int>();

            users.ToList().ForEach(m => userIds.Add(m.UserId));
            var messageId = _chatFacade.SendMessage(userId, groupId, messageRequest.Text);
            var message   = _chatFacade.GetMessage(messageId, groupId, userId);
            var response  = new MessageSentResponse(messageId);
            await _notificationsMessageHandler.SendMessageToAllAsync(message.Id, message.SenderId, message.SenderName,
                                                                     message.SentOn, message.Text, userIds);

            return(Ok(response));
        }
Beispiel #2
0
        public void HandleMessage(Session session, BaseMessage message)
        {
            var receivedMessage = JsonConvert.DeserializeObject <Message>(JsonConvert.SerializeObject(message.Payload));
            var response        = new BaseMessage(message, true);

            response.Ok   = true;
            response.From = pluginHostAPI.GetServerID();
            response.To   = null;
            var respPayload = new MessageSentResponse();

            respPayload.MessageID             = Guid.NewGuid().ToString();
            respPayload.OriginServerTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
            response.Payload = respPayload.ToDictionary();
            session.ConnectionHandler.SendMessage(response);

            var recipientSession = pluginHostAPI.GetSessionManager()
                                   .GetSessions()
                                   .Select(x => x.Value)
                                   .Where(x => x.AuthData.EntityID.Where(x => x == message.To.First()).FirstOrDefault() != null)
                                   .FirstOrDefault();

            if (recipientSession == null)
            {
                Log.Debug("Recipient doesn't exist or currently offline!");
                return; // TODO fix this behaviour in specs
            }

            var msgForRecipient = new BaseMessage();

            msgForRecipient.From        = session.AuthData.EntityID.First();
            msgForRecipient.MessageType = "urn:cadmium:chats:message";
            respPayload.Type            = receivedMessage.Type;
            respPayload.Content         = receivedMessage.Content;
            msgForRecipient.Payload     = respPayload.ToDictionary();
            recipientSession.ConnectionHandler.SendMessage(msgForRecipient);
        }