コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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("");
            }
        }