Пример #1
0
        public async Task SendChatMessage(ChatItem chatItem)
        {
            var msg = new Message(true, true)
            {
                Text     = chatItem.ComposeMessage,
                Nickname = account?.Nickname ?? "Foo",
                IsSelf   = true
            };

            var toJid = new Matrix.Jid(chatItem.Contact.Jid);

            if (chatItem.Contact.MessageResource != null)
            {
                toJid.Resource = chatItem.Contact.MessageResource;
            }

            var xmppMsg = new MatrixMessage
            {
                Type = MatriXMessageType.Chat,
                To   = toJid,
                Id   = msg.Id,
                Body = chatItem.ComposeMessage
            };

            await xmppClient.SendAsync(xmppMsg);

            chatItem.Messages.Add(msg);

            // clear the textbox
            chatItem.ComposeMessage = string.Empty;
        }
Пример #2
0
        public void TestMessageWithAddress()
        {
            var addresses = new Addresses();

            addresses.AddAddress(new Address
            {
                Type        = Type.To,
                Jid         = "[email protected]/Work",
                Description = "Joe Hildebrand"
            });

            addresses.AddAddress(new Address
            {
                Type        = Type.Cc,
                Jid         = "[email protected]/Home",
                Description = "Jeremie Miller"
            });

            var msg = new Matrix.Xmpp.Client.Message
            {
                To        = "multicast.jabber.org",
                Body      = "Hello, world!",
                Addresses = addresses
            };

            msg.ShouldBe(Resource.Get("Xmpp.ExtendedStanzaAddressing.address5.xml"));
        }
Пример #3
0
 public void IncomingMessage(Message msg)
 {
     if (!string.IsNullOrEmpty(msg.Body))
     {
         TMsgWrapper msgObj = JsonConvert.DeserializeObject <TMsgWrapper>(msg.Body);
         if (msgObj != null)
         {
             if (m_form != null)
             {
                 if (msg.From == null)
                 {
                     m_form.IncomingEMRALDMsg("Server", msgObj);
                 }
                 else
                 {
                     m_form.IncomingEMRALDMsg(msg.From, msgObj);
                 }
             }
             //todo - process the message with EMRALD
         }
         else
         {
             m_form.IncomingOtherMsg(msg.From, msg.Body);
         }
     }
 }
Пример #4
0
        public void BuildGcmMessage()
        {
            var msg = new Matrix.Xmpp.Client.Message {
                Id = "foo"
            };

            msg.Add(new Gcm {
                Value = "{'to':'REGISTRATION_ID'}"
            });

            msg.ShouldBe(Resource.Get("Xmpp.Google.GCM.message1.xml"));
        }
Пример #5
0
        static void Main(string[] args)
        {
            ConfigureServices(serviceCollection);

            serviceProvider = serviceCollection.BuildServiceProvider();

            logger = serviceProvider.GetService <ILogger <Program> >();

            logger.LogInformation($"Shortel Token {appConfig.ShoreTelToken}");
            logger.LogInformation($"Shoretel Host {appConfig.Host}");
            logger.LogInformation($"Shortel Domain {appConfig.Domain}");
            logger.LogInformation($"Shortel Username {appConfig.UserName}");
            logger.LogInformation($"Smtp Host {appConfig.SmtpHost}");
            logger.LogInformation($"Smtp port {appConfig.SmtpPort}");
            logger.LogInformation($"Smtp port {appConfig.SendEmailDelay}");
            foreach (string user in appConfig.UsersToRespondTo)
            {
                logger.LogInformation($"Users to respond to {user}");
            }

            msgHub = new TinyMessengerHub(new ErrorHandler(logger));

            msgHub.Subscribe <ActiveMessage>(m =>
            {
                logger.LogDebug("Enter ActiveMessage");
                try
                {
                    var email = emailCollection.GetOrAdd(m.message.Thread, e => new Email(m.message.From.Bare, m.message.Thread));
                    Monitor.Enter(email);
                    try
                    {
                        if (email.mailBody.Length < 1)
                        {
                            if (appConfig.UsersToRespondTo.FindIndex(x => x.Equals(email.EmailFrom, StringComparison.OrdinalIgnoreCase)) >= 0)
                            {
                                var txtMsg = "I am unable to respond to ShoreTel IMs right now.  Leave a message, exit the conversation and I will get back with you,";
                                var sndMsg = new Matrix.Xmpp.Client.Message(m.message.From, MessageType.Chat, txtMsg, "");
                                xmppClient.SendAsync(sndMsg).GetAwaiter().GetResult();
                            }
                        }
                        email.AddString(m.message.Body);
                    }
                    finally
                    {
                        Monitor.Exit(email);
                    }
                }
                catch (Exception e)
                {
                    logger.LogError($"Active message error {e.Message}");
                }
                logger.LogDebug("Exit ActiveMessage");
            });

            msgHub.Subscribe <GoneMessage>(m =>
            {
                logger.LogDebug("Enter GoneMessage");
                try
                {
                    Email email;
                    if (emailCollection.TryRemove(m.Thread, out email))
                    {
                        Monitor.Enter(email);
                        try
                        {
                            using (var client = new SmtpClient(new MailKit.ProtocolLogger("smtp.log", false)))
                            {
                                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                                client.CheckCertificateRevocation          = false;

                                client.ConnectAsync(appConfig.SmtpHost, appConfig.SmtpPort, SecureSocketOptions.StartTlsWhenAvailable).GetAwaiter().GetResult();

                                var mailMsg = new MimeMessage();

                                mailMsg.From.Add(new MailboxAddress(email.EmailFrom));
                                mailMsg.To.Add(new MailboxAddress(appConfig.UserName));

                                mailMsg.Subject = $"ShoreTel message from {email.EmailFrom}";

                                var builder = new BodyBuilder
                                {
                                    TextBody = email.mailBody.ToString()
                                };

                                mailMsg.Body = builder.ToMessageBody();

                                client.SendAsync(mailMsg).GetAwaiter().GetResult();

                                client.DisconnectAsync(true).GetAwaiter().GetResult();
                            }
                        }
                        finally
                        {
                            Monitor.Exit(email);
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.LogError($"Gone message error {e.Message}");
                }
                logger.LogDebug("Exit GoneMessage");
            });


            var pipelineInitializerAction = new Action <IChannelPipeline, ISession>((pipeline, session) =>
            {
                pipeline.AddFirst(new MyLoggingHandler(logger));
            });

            xmppClient = new XmppClient()
            {
                Username    = appConfig.UserName,
                XmppDomain  = appConfig.Domain,
                SaslHandler = new ShoretelSSOProcessor(appConfig.ShoreTelToken),
                // use a local server for dev purposes running
                // on a non standard XMPP port 5333
                HostnameResolver = new StaticNameResolver(IPAddress.Parse(appConfig.Host), appConfig.Port)
            };

            xmppClient.XmppSessionStateObserver.Subscribe(v =>
            {
                Console.WriteLine($"State changed: {v}");
                logger.LogInformation(v.ToString());
            });

            xmppClient
            .XmppXElementStreamObserver
            .Where(el => el is Presence)
            .Subscribe(el =>
            {
                logger.LogDebug("Enter Presence observer");
                //Console.WriteLine(el.ToString());
                //logger.LogInformation(el.ToString());
                logger.LogDebug("Exit Presence observer");
            });

            xmppClient
            .XmppXElementStreamObserver
            .Where(el => el is Message)
            .Subscribe(el =>
            {
                logger.LogDebug("Enter Message observer");
                var msg = el as Message;

                switch (msg.Chatstate)
                {
                case Matrix.Xmpp.Chatstates.Chatstate.Active:
                    msgHub.PublishAsync(new ActiveMessage(msg), x => { });
                    break;

                case Matrix.Xmpp.Chatstates.Chatstate.Composing:
                    break;

                case Matrix.Xmpp.Chatstates.Chatstate.Gone:
                    msgHub.PublishAsync(new GoneMessage(msg.Thread), x => { });
                    break;
                }

                logger.LogDebug("Exit Message observer");
            });

            xmppClient
            .XmppXElementStreamObserver
            .Where(el => el is Iq)
            .Subscribe(el =>
            {
                Console.WriteLine(el.ToString());
                logger.LogInformation(el.ToString());
            });

            xmppClient.ConnectAsync().GetAwaiter().GetResult();

            // Send our presence to the server
            xmppClient.SendPresenceAsync(Show.Chat, "free for chat").GetAwaiter().GetResult();

            using (Timer t = new Timer(TimerCallback, null, 0, 1000))
            {
                Console.ReadLine();
            }

            // Disconnect the XMPP connection
            xmppClient.DisconnectAsync().GetAwaiter().GetResult();
        }
Пример #6
0
 /// <summary>
 /// 添加用户请求
 /// </summary>
 /// <param name="jid"></param>
 /// <param name="msgStr"></param>
 public void sendAddUser(string jid, string msgStr)
 {
     Matrix.Xmpp.Client.Message msg = new Matrix.Xmpp.Client.Message(jid, SysParams.Sys_AddFriendMessage + msgStr, "", "");
     //msg.XHtml.Add(
     StaticClass.xmppClient.Send(msg);
 }