Esempio n. 1
0
  /**
   * 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());
  }
Esempio n. 2
0
 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);
   }
 }