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