/** * Send and request latest presence info for this Buddy: */ public void SendPresence() { XmlSerializer ser = new XmlSerializer(typeof(Brunet.Chat.Presence)); System.IO.StringWriter sw = new System.IO.StringWriter(); XmlWriter w = new XmlTextWriter(sw); Brunet.Chat.Presence p = new Brunet.Chat.Presence(); p.Show = User.Show; if( p.Show == Brunet.Chat.Presence.TypeValues.Unavailable ) { p.PresType = Brunet.Chat.Presence.TypeValues.Unavailable; } p.Status = User.Status; ser.Serialize(w, p); //Wait for one result: Channel results = new Channel(1); results.CloseEvent += delegate(object q, System.EventArgs args) { try { RpcResult res = results.Dequeue() as RpcResult; string p_str = (string)res.Result; XmlReader r = new XmlTextReader(new System.IO.StringReader(p_str)); XmlSerializer pser = new XmlSerializer(typeof(Brunet.Chat.Presence)); this.Presence = (Brunet.Chat.Presence)pser.Deserialize(r); } catch { //I guess this buddy is offline: Status = Brunet.Chat.Presence.TypeValues.Unavailable; } }; _node.Rpc.Invoke(Sender, results, "example:chat.presence", sw.ToString()); }
public void HandleRpc(ISender caller, string method, IList arguments, object request_state) { if( method == "message") { var sr = new System.IO.StringReader((string)arguments[0]); XmlReader r = new XmlTextReader(sr); var mser = new XmlSerializer(typeof(Brunet.Chat.Message)); var message = (Brunet.Chat.Message)mser.Deserialize(r); var args = new ChatEventArgs(caller, message); Buddy b = GetBuddyWithSender(caller); ChatEvent(b, args); _node.Value.Rpc.SendResult(request_state, true); } else if( method == "presence" ) { Buddy b = GetBuddyWithSender(caller); if (b == null) { throw new Exception("Unknown buddy: " + caller.ToUri()); } //Read the presence information: var sr = new System.IO.StringReader((string)arguments[0]); XmlReader r = new XmlTextReader(sr); var pser = new XmlSerializer(typeof(Brunet.Chat.Presence)); Brunet.Chat.Presence pres = (Brunet.Chat.Presence)pser.Deserialize(r); b.Presence = pres; //Send our response: System.IO.StringWriter sw = new System.IO.StringWriter(); var tw = new XmlTextWriter(sw); Brunet.Chat.Presence local_p = new Brunet.Chat.Presence(); local_p.Show = User.Show; local_p.Status = User.Status; pser.Serialize(tw, local_p); _node.Value.Rpc.SendResult(request_state, sw.ToString()); } else { throw new Exception("Unknown method: " + method); } }