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; }
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")); }
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); } } }
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")); }
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(); }
/// <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); }