public void Send(Node node, Encoding encoding) { var elem = node as DirectionalElement; if (elem != null && elem.To != null) { var type = node.GetType(); if (type == typeof(Message)) { try { string nameFrom = elem.From.User.ToLowerInvariant(); var message = (Message)node; if (message.Body != null) { signalrServiceClient.SendMessage(nameFrom, message.To.User.ToLowerInvariant(), message.Body, -1, elem.From.Server); } else if (message.FirstChild.HasTag(typeof(Invite))) { signalrServiceClient.SendInvite(nameFrom, message.To.User.ToLowerInvariant(), elem.To.Server); } } catch (Exception ex) { _log.ErrorFormat("Unexpected error, connectionId = {0}, {1}, {2}, {3}", Id, ex.Message, ex.StackTrace, ex.InnerException != null ? ex.InnerException.Message : string.Empty); } } } }
public void SendMessage(int tenantId, string from, string to, string text, string subject) { try { _log.DebugFormat("Send Message: tenantId={0}, from={1}, to={2}, text={3}", tenantId, from, to, text); if (string.IsNullOrEmpty(text)) { return; } if (from == null) { signalrServiceClient.SendMessage(string.Empty, to.ToLowerInvariant(), text, tenantId, string.Empty); } var jidFrom = GetJid(from, tenantId); var jidTo = to != string.Empty ? GetJid(to, tenantId) : new Jid(jidFrom.Server); var message = new Message(jidTo, jidFrom, MessageType.chat, text); var sessions = _xmppServer.SessionManager.GetBareJidSessions(jidTo, GetSessionsType.All); if (sessions.Count != 0) { foreach (var session in sessions) { if (session != null && !session.IsSignalRFake) { ((IXmppSender)_xmppServer.GetService(typeof(IXmppSender))).SendTo(session, message); } } } else { _xmppServer.StorageManager.OfflineStorage.SaveOfflineMessages(message); } var handlers = _xmppServer.HandlerManager.HandlerStorage.GetStanzaHandlers(jidFrom, typeof(Message)); if (handlers.Count > 1) { var messageArchiveHandler = handlers[1] as MessageArchiveHandler; if (messageArchiveHandler != null) { messageArchiveHandler.HandleMessage(null, message, null); } } else { var messageArchiveHandler = new MessageArchiveHandler(); messageArchiveHandler.HandleMessage(null, message, null); messageArchiveHandler.FlushMessageBuffer(); } } catch (Exception e) { _log.ErrorFormat("Unexpected error, from = {0}, to = {1}, {2}, {3}, {4}", from, to, e.Message, e.StackTrace, e.InnerException != null ? e.InnerException.Message : string.Empty); } }