コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
        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);
            }
        }