public void OnPrivateMessage(agsXMPP.protocol.client.Message msg) { try { agsXMPP.protocol.x.muc.User x = (agsXMPP.protocol.x.muc.User)msg.SelectSingleElement(typeof(agsXMPP.protocol.x.muc.User)); if (x != null && x.Invite != null) { Program.Jabber.muc.handleInvitation(msg, x.Invite); return; } // Ignore Chatstate notifications if no conversation is open if (!msg.HasTag("body") && !this.HasWindow(msg.From)) { return; } Jid relevantJid = msg.From; // XEP-0280, Message Carbons var carbonsSent = msg.SelectSingleElement("sent", JabberService.URN_CARBONS); var carbonsReceived = msg.SelectSingleElement("received", JabberService.URN_CARBONS); if (carbonsSent != null) { msg = (agsXMPP.protocol.client.Message)carbonsSent.SelectSingleElement("message", true); relevantJid = msg.To; } else if (carbonsReceived != null) { msg = (agsXMPP.protocol.client.Message)carbonsReceived.SelectSingleElement("message", true); relevantJid = msg.From; } string dt = JabberService.GetMessageDt(msg); if (msg.HasTag("body")) { Program.db.InsertMessage(relevantJid.Bare, msg.Id, msg.From, msg.Body, dt); } DirectMessageForm dmfrm = GetWindow(relevantJid); dmfrm.onMessage(msg); dmfrm.Show(); if (msg.HasTag("body")) { dmfrm.Activate(); } else { if (!String.IsNullOrEmpty(msg.Subject)) { dmfrm.onNotice("Subject set: " + msg.Subject.Replace("<", "<")); } else if (msg.Error != null) { dmfrm.onNotice("An error occured: " + msg.Error.ToString().Replace("<", "<")); } //else dmfrm.onNotice("Unknown message stanza: " + msg.ToString().Replace("<", "<")); } } catch (Exception ex) { return; } }
void xmppConnection_OnMessage(object sender, agsXMPP.protocol.client.Message msg) { //Trace.WriteLine(msg.ToString()); if (msg.From.Bare != ServiceSender) { return; } Element entryE = msg.SelectSingleElement("entry"); Element sourceE = entryE.SelectSingleElement("source"); Element authorE = sourceE.SelectSingleElement("author"); User user = new User { Description = authorE.GetTag("description"), Id = authorE.GetTagInt("twitter_id"), Location = authorE.GetTag("location"), Protected = authorE.GetTagBool("protected"), Name = authorE.GetTag("name"), ScreenName = authorE.GetTag("screen_name"), Url = authorE.GetTag("url"), ProfileImageUrl = authorE.GetTag("profile_image_url") }; String body = msg.Body; if (body.IndexOf(": ") > -1) { body = body.Substring(body.IndexOf(": ") + 2); } Status status = new Status { CreatedAt = DateTime.Parse(entryE.GetTag("published")), Text = body, User = user, Id = entryE.GetTagInt((entryE.GetTagInt("twitter_id") == 0 ? "status_id" : "twitter_id")) // HACK: 何故かどっちかでくる }; OnStatusUpdateReceived(status); }