/// <summary> /// Procesa an arbitrary XMPP Message /// </summary> /// <param name = "node"></param> /// <returns></returns> private AutoResetEvent ProcessXmppMessage(XmppStreamElement node) { if (node != null) { Debug.WriteLine(node.ToString()); if (node.OpensXmppStream) { OnXmppStreamInitializedSubject.OnNext(node.ToString()); } else if (node.ClosesXmppStream) { OnXmppStreamClosedSubject.OnNext(node.ToString()); } else { var message = XmppSerializer.Deserialize(node.Name, node.ToString()); if (message != null) { if (message is Proceed) { return(tlsProceedEvent); } OnMessageReceivedSubject.OnNext(message); } } } return(null); }
public override void InitializeXmppStream() { var message = new HttpBindBody(); message.Rid = (rid++).ToString(); message.To = ConnectionString.HostName; message.Lang = DefaultLanguage; if (streamResponse == null) { message.Content = ContentType; message.From = UserId.BareIdentifier; message.Hold = 1; message.HoldSpecified = true; message.Route = String.Format(RouteFormat, ConnectionString.HostName); message.Ver = BoshVersion; message.Wait = 60; message.WaitSpecified = true; message.Ack = "1"; } else { message.Sid = streamResponse.Sid; message.Restart = true; } var response = SendSync(XmppSerializer.Serialize(message)); #warning TODO: If no <stream:features/> element is included in the connection manager's session creation response, then the client SHOULD send empty request elements until it receives a response containing a <stream:features/> element. if (response != null) { streamResponse = response; ProcessResponse(response); #warning TODO: Check if the response has an stream-features element OnXmppStreamInitializedSubject.OnNext(String.Empty); } else { #warning TODO: Review how to handle this case throw new Exception(""); } }