Ejemplo n.º 1
0
        private void DiscoCompleteCallback( IAsyncResult ar )
        {
            try
            {
                Packet p = _sm.Session.EndSend(ar);

                if ( p == null || ! (p is DiscoveryItemsResponse) )
                    //this server probably doesn't support disco, try browse
                    BrowseForChatServers();
                else
                {
                    DiscoveryItemsResponse resp = WConvert.ToDiscoItemsResponse(p);

                    //request info for each of the items returned by the server
                    //the info will tell is whether or not it is a chat server
                    foreach (DiscoveryItem itm in resp.Items)
                    {
                        //chat servers usually don't use node, only request items with no node value
                        if (itm.Node.Equals(string.Empty))
                        {
                            DiscoveryInfoRequest req = new DiscoveryInfoRequest(itm.JID);
                            _sm.BeginSend(req.ToPacket, new AsyncCallback(ServiceInfoCallback));
                        }
                    }
                }
            }
            catch
            {
                //this server probably doesn't support disco, try browse
                BrowseForChatServers();
            }
        }
Ejemplo n.º 2
0
        private void ChatServiceItemsCallback( IAsyncResult ar )
        {
            try
            {
                Packet p = _sm.Session.EndSend(ar);
                if ((p != null) && (p is DiscoveryItemsResponse))
                {
                    DiscoveryItemsResponse resp = WConvert.ToDiscoItemsResponse(p);

                    if (resp.Items.Count > 0)
                        //warning: this should be smarter as a service with many rooms will generate A LOT of traffic
                        foreach ( DiscoveryItem itm in resp.Items )
                        {
                            const int RoomItemsTimeout = 30000;

                            DiscoveryInfoRequest req = new DiscoveryInfoRequest(itm.JID, itm.Node);
                            _sm.BeginSend(req.ToPacket, RoomItemsTimeout, new AsyncCallback(RoomInfoCallback), ar.AsyncState);
                        }
                }
            }
            catch {}
        }