Beispiel #1
0
 /// <summary>
 /// Funkcja dzialajaca na rzecz watku
 /// </summary>
 private void go()
 {
     try
     {
         while (true)
         {
             Thread.Sleep(2 * 60 * 1000);                      // odczekaj 2 min
             GaduPacketHeader header = new GaduPacketHeader(); // przesylamy tylko naglowek
             header.Type   = GaduPacketConstans.GG_PING;       // typu GG_PING
             header.Length = 0;                                // po naglowku nic nie idzie, rozmiar 0
             gaduSender.sendPacket(header);                    // wyslij pakiet
             if (OnPing != null)                               // jezeli ktos podstawil jakas delegacje pod event
             {
                 OnPing.BeginInvoke(null, null);               // to ja wywolaj
             }
         }
     }
     catch (ThreadAbortException)
     {   // nie zadreczajmy uzytkownika tym wyjatkiem, w 99% powodowany przez Thread.Abort();
     }
     catch (Exception e)
     {   // jezeli cokolwiek poszlo nie tak
         if (Gadu.GaduCriticalError() == false)
         {
             throw new GaduPingerException(e.Message);
         }
     }
 }
Beispiel #2
0
        /// <summary>
        /// Przesyla cala liste na serwer
        /// </summary>
        public void sendAll()
        {
            try
            {
                GaduPacketHeader          gaduPacketHeader;
                GaduPacketUserListRequest gaduPacketUserlistRequest;
                for (int i = 0; i < this.Count; i++)
                {
                    gaduPacketHeader          = new GaduPacketHeader();
                    gaduPacketUserlistRequest = new GaduPacketUserListRequest();

                    gaduPacketHeader.Type = GaduPacketConstans.GG_USERLIST_REQUEST;

                    gaduPacketUserlistRequest.Type    = (i == 0 ? GaduPacketConstans.GG_USERLIST_PUT : GaduPacketConstans.GG_USERLIST_PUT_MORE);
                    gaduPacketUserlistRequest.Request = this[i].getUserListString();

                    gaduPacketHeader.Length = gaduPacketUserlistRequest.getSize();

                    gaduSender.sendPacket(gaduPacketHeader);
                    gaduSender.sendPacket(gaduPacketUserlistRequest);
                }
            }
            catch (Exception exp)
            {
                throw new GaduUserListException(exp.Message);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Usuwanie numerku w czasie pracy
        /// </summary>
        /// <param name="gaduPacketNotify">Numer do usuniecia reprezentowany przez pakiet GaduPacketNotify</param>
        public void delNotify(GaduPacketNotify gaduPacketNotify)
        {
            GaduPacketHeader gaduPacketHeader = new GaduPacketHeader();    // naglowek

            gaduPacketHeader.Type   = GaduPacketConstans.GG_REMOVE_NOTIFY; // ustawiamy odpowiedni typ pakiety
            gaduPacketHeader.Length = gaduPacketNotify.getSize();          // rozmiar pakiety
            gaduSender.sendPacket(gaduPacketHeader);                       // wysylamy naglowek
            gaduSender.sendPacket(gaduPacketNotify);                       // wysylamy pakiet
        }
Beispiel #4
0
        /// <summary>
        /// Wysyla do servera zapytanie o uzytkownika
        /// </summary>
        /// <param name="gaduUser">Uzytkownik, ktorego chcemy znalezc</param>
        public void Search(GaduUser gaduUser)
        {
            GaduPacketHeader   gaduPacketHeader   = new GaduPacketHeader();
            GaduPacketPubDir50 gaduPacketPubDir50 = new GaduPacketPubDir50();

            gaduPacketHeader.Type   = GaduPacketConstans.GG_PUBDIR50_REQUEST;
            gaduPacketPubDir50.Type = GaduPacketConstans.GG_PUBDIR50_SEARCH;
            gaduPacketPubDir50.Seq  = (int)DateTime.Now.Ticks;
            gaduPacketPubDir50.Data = gaduUser.getPubDirString();
            gaduPacketHeader.Length = gaduPacketPubDir50.getSize();
            gaduSender.sendPacket(gaduPacketHeader);
            gaduSender.sendPacket(gaduPacketPubDir50);
        }
Beispiel #5
0
 /// <summary>
 /// Wysyla wszystkie pakiety na server
 /// </summary>
 public void sendNotify()
 {
     try
     {
         if (this.Count == 0)    // jezeli nasza lista jest pusta
         {
             GaduPacketHeader header = new GaduPacketHeader();
             header.Type   = GaduPacketConstans.GG_LIST_EMPTY; // wysylamy tylko pakiet typu GG_LIST_EMPTY
             header.Length = 0;
             gaduSender.sendPacket(header);
         }
         else if (this.Count < 400) // jezeli lista ma mniej niz 400 wpisow, nie musimy jej dzielic
         {
             GaduPacketHeader header = new GaduPacketHeader();
             header.Type   = GaduPacketConstans.GG_NOTIFY_LAST; // pierwszy pakiet wysylamy jako ostatni
             header.Length = this.Count * this[0].getSize();    // rozmiar = suma rozmiarow wszystkich pakietow, a wiec wysylamy
             gaduSender.sendPacket(header);                     // wszystko jako jeden zlepek
             for (int i = 0; i < this.Count; i++)               // wysylamy kolejne pakiety
             {
                 gaduSender.sendPacket(this[i]);
             }
         }
         else    // w tym trybie mamy wiecej niz 400 pakietow, musimy dzielic je po 400 wpisow
         {
             GaduPacketHeader header;
             for (int i = 0; i < this.Count; i++)
             {
                 if (i % 400 == 0 && i + 400 >= this.Count)  // jezeli to juz ostatnie 400 pakietow
                 {
                     header        = new GaduPacketHeader();
                     header.Type   = GaduPacketConstans.GG_NOTIFY_LAST;  // wyslij pakiety jako ostatni zlepek
                     header.Length = (this.Count - i) * this[0].getSize();
                     gaduSender.sendPacket(header);
                 }
                 else if (i % 400 == 0)  // co 400 pakietow trzeba wyslac nowy naglowek
                 {
                     header        = new GaduPacketHeader();
                     header.Type   = GaduPacketConstans.GG_NOTIFY_FIRST;
                     header.Length = 400 * this[0].getSize();
                     gaduSender.sendPacket(header);
                 }
                 gaduSender.sendPacket(this[i]); // wysylamy dany pakiet
             }
         }
     }
     catch (Exception exp)
     {
         throw new GaduNotifierException(exp.Message);
     }
 }
Beispiel #6
0
 /// <summary>
 /// Logowanie do gg
 /// </summary>
 /// <param name="uin">Numer gg</param>
 /// <param name="pass">Haslo</param>
 public void login(int uin, String pass)
 {
     try
     {
         GaduPacketHeader header      = new GaduPacketHeader();         // naglowek
         GaduPacketLogin  loginPacket = new GaduPacketLogin();          // pakiet logowania
         header.Type      = GaduPacketConstans.GG_LOGIN70;              // bedziemy sie logowac
         header.Length    = loginPacket.getSize();                      // dlugosc pakietu
         loginPacket.Uin  = uin;                                        // nr. gg
         loginPacket.Hash = BitConverter.GetBytes(getHash(pass, seed)); // szyfrujemy haslo, potem konwertujemy na tablice bajtow
         gaduSender.sendPacket(header);                                 // najpierw wpisujemy naglowek
         gaduSender.sendPacket(loginPacket);                            // teraz wpiszemy wlasciwy pakiet
     }
     catch (Exception e)
     {
         throw new GaduLoginException(e.Message);
     }
 }
Beispiel #7
0
 /// <summary>
 /// Zmienia status uzytkownika gg
 /// </summary>
 /// <param name="statusid">Numer statusu nalezy pobrac z tad GaduPacketConstans.GG_STATUS_*</param>
 /// <param name="descr">Opis, jezeli ustawilismy status, ktory nie jest typu *_DESCR, dajemy pusty string</param>
 public void changeStatus(int statusid, string descr)
 {
     try
     {
         GaduPacketHeader header = new GaduPacketHeader();      // naglowek
         GaduPacketStatus status = new GaduPacketStatus();      // pakiet zmieniajacy status
         header.Type        = GaduPacketConstans.GG_NEW_STATUS; // typ pakietu to zmiana status
         status.Status      = statusid;                         // przypisujemy status id
         status.Description = descr;                            // narazie nie mamy zadnego opisu
         header.Length      = status.getSize();                 // pobieramy rozmiar pakietu
         gaduSender.sendPacket(header);                         // wysylamy naglowek
         gaduSender.sendPacket(status);                         // wysylamy wlasciwiy pakiet
     }
     catch (Exception exp)
     {
         throw new GaduStatusException(exp.Message);
     }
 }
Beispiel #8
0
        /// <summary>
        /// Wysyla pakiet do servera, ktory sprawia ze ten przesle nam liste kontaktow
        /// </summary>
        public void getListFromServer()
        {
            try
            {
                GaduPacketHeader          gaduPacketHeader          = new GaduPacketHeader();
                GaduPacketUserListRequest gaduPacketUserlistRequest = new GaduPacketUserListRequest();

                gaduPacketHeader.Type          = GaduPacketConstans.GG_USERLIST_REQUEST;
                gaduPacketHeader.Length        = 1;
                gaduPacketUserlistRequest.Type = GaduPacketConstans.GG_USERLIST_GET;

                gaduSender.sendPacket(gaduPacketHeader);
                gaduSender.sendPacket(gaduPacketUserlistRequest);
            }
            catch (Exception exp)
            {
                throw new GaduUserListException(exp.Message);
            }
        }
Beispiel #9
0
 /// <summary>
 /// Wysyla wiadomosc pod dany numer
 /// </summary>
 /// <param name="uin">Numer odbiorcy</param>
 /// <param name="msg">Wiadomosc</param>
 public void sendMessage(int uin, string msg)
 {
     try
     {
         GaduPacketHeader  header  = new GaduPacketHeader();  // naglowek
         GaduPacketMessage message = new GaduPacketMessage(); //wiadomosc
         header.Type       = GaduPacketConstans.GG_SEND_MSG;  // bedziemy wysylac wiadomosc
         message.Recepient = uin;                             // numer odbiorcy
         message.Klasa     = GaduPacketConstans.GG_CLASS_MSG; // klasa wiadomosci
         message.Message   = msg;                             // wiadomosc, string zostanie zamieniony na ciag bajtow
         header.Length     = message.getSize();               // wpisujemy wielkosc pakietu
         gaduSender.sendPacket(header);                       // przesylamy najpierw naglowek
         gaduSender.sendPacket(message);                      // potem przesylamy wiadomosc
     }
     catch (Exception exp)
     {
         throw new GaduMessageException(exp.Message);
     }
 }
Beispiel #10
0
        /// <summary>
        /// Zajmuje sie sprawdzaniem czy cos jest na gniezdzie, wczytywaniem naglowka
        /// oraz calych pakietow
        /// </summary>
        private void go()
        {
            try
            {
                GaduPacketHeader header = new GaduPacketHeader();   // naglowek
                while (true)
                {
                    if (!tcpClient.Connected || tcpClient.GetStream().DataAvailable == false || work == false)
                    {                                      // jezeli na gniezdzie nie ma 8 pelnych bajtow lub gniazdo nie jest podlaczone to
                        Thread.Sleep(sleepTime);           // czekamy na nowe pakiety
                        continue;                          // i przechodzimy do nastepnej iteracji
                    }
                    header.read(tcpClient.GetStream(), 8); // czytamy naglowek
                    if (OnPacket != null)
                    {
                        OnPacket.BeginInvoke(header, null, null);
                    }
                    switch (header.Type)
                    {
                    case GaduPacketConstans.GG_RECV_MSG:                   // ktos przyslal nam wiadomosc
                        GaduPacketRecieveMessage msg = new GaduPacketRecieveMessage();
                        msg.read(tcpClient.GetStream(), header.Length);    // wczytujemy wiadomosc
                        if (OnRecieveMessage != null)                      // jezeli ktos podstawil swoja funkcje pod event
                        {
                            OnRecieveMessage.BeginInvoke(msg, null, null); // to ja wywolujemy podstawiajac jako argument pakiet z wiadomoscia
                        }
                        break;

                    case GaduPacketConstans.GG_SEND_MSG_ACK:            // odebralismy pakiet potwierdzajacy wiadomosc
                        GaduPacketMessageAck ack = new GaduPacketMessageAck();
                        ack.read(tcpClient.GetStream(), header.Length); // wczytaj pakiet
                        if (OnRecieveMessageAck != null)
                        {
                            OnRecieveMessageAck.BeginInvoke(ack, null, null);           // wywolaj event
                        }
                        break;

                    case GaduPacketConstans.GG_PONG:            // otrzymalismy pakiet GG_PONG z servera
                        if (OnPong != null)
                        {
                            OnPong.BeginInvoke(null, null);
                        }
                        break;

                    case GaduPacketConstans.GG_LOGIN_OK:        // otrzymalismy pakiet informujacy nas o tym ze logowanie sie powiodlo
                        if (header.Length == 1)
                        {
                            tcpClient.GetStream().ReadByte();           // jeden bajt, ktory nie zawsze musi sie pojawic, przeznaczenie nie poznane
                        }
                        if (OnLoginOK != null)
                        {
                            OnLoginOK.BeginInvoke(null, null);          // wywolaj event
                        }
                        break;

                    case GaduPacketConstans.GG_NEED_EMAIL:      // server chce abysmy uzupelnili e-mail w naszych danych
                        if (OnLoginNeedEmail != null)
                        {
                            OnLoginNeedEmail.BeginInvoke(null, null);           // wywolaj event
                        }
                        break;

                    case GaduPacketConstans.GG_LOGIN_FAILED:            // logowanie sie nie powiodlo
                        if (OnLoginFailed != null)
                        {
                            OnLoginFailed.BeginInvoke(null, null);      // wywolaj event
                        }
                        break;

                    case GaduPacketConstans.GG_NOTIFY_REPLY77: // otrzymalismy pakiet mowiacy o tym ze ktos zmienil status
                        GaduPacketNotifyReplay77 gaduPacketNotifyReplay77;
                        while (header.Length > 0)              // najprawdopodobnie bedzie to zlepek pakietow, a wiec bedziemy je wczytywac po kolei
                        {
                            gaduPacketNotifyReplay77 = new GaduPacketNotifyReplay77();
                            gaduPacketNotifyReplay77.read(tcpClient.GetStream(), header.Length);
                            header.Length -= gaduPacketNotifyReplay77.getSize();
                            if (OnGaduNotifyReplay != null)
                            {
                                OnGaduNotifyReplay.BeginInvoke(gaduPacketNotifyReplay77, null, null);       // dla danego pakiety wywolaj event
                            }
                        }
                        break;

                    case GaduPacketConstans.GG_STATUS77:                               // ktos zmienil status na gg
                        GaduPacketStatus77 gaduPacketStatus77 = new GaduPacketStatus77();
                        gaduPacketStatus77.read(tcpClient.GetStream(), header.Length); // wczytujemy pakiet
                        if (OnGaduStatus != null)
                        {
                            OnGaduStatus.BeginInvoke(gaduPacketStatus77, null, null);       // wywolujemny event
                        }
                        break;

                    case GaduPacketConstans.GG_USERLIST_REPLY:
                        GaduPacketUserListRequest gaduPacketUserlistReplay = new GaduPacketUserListRequest();
                        gaduPacketUserlistReplay.read(tcpClient.GetStream(), header.Length);
                        if (OnUserListReplay != null)
                        {
                            OnUserListReplay.BeginInvoke(gaduPacketUserlistReplay, null, null);
                        }
                        break;

                    case GaduPacketConstans.GG_PUBDIR50_REPLY:
                        GaduPacketPubDir50 gaduPacketPubDir50 = new GaduPacketPubDir50();
                        gaduPacketPubDir50.read(tcpClient.GetStream(), header.Length);
                        if (OnPubDirReplay != null)
                        {
                            OnPubDirReplay.BeginInvoke(gaduPacketPubDir50, null, null);
                        }
                        break;

                    case GaduPacketConstans.GG_DISCONNECTING:
                        if (OnGaduDisconnecting != null)
                        {
                            OnGaduDisconnecting.BeginInvoke(null, null);
                        }
                        break;

                    case GaduPacketConstans.GG_DISCONNECTING2:
                        if (OnGaduDisconnecting != null)
                        {
                            OnGaduDisconnecting.BeginInvoke(null, null);
                        }
                        break;

                    default:                                    // jezeli otrzymalismy jakis pakiet, ktory jeszcze nie jest obslugiwany przez biblioteke
                        byte[] packet = new byte[header.Length];
                        for (int i = 0; i < header.Length; i++) // to wczytaj tylko pakiet z gniazda i nic z nim nie rob
                        {
                            packet[i] = (byte)tcpClient.GetStream().ReadByte();
                        }
                        if (OnUnhandledPacket != null)
                        {
                            OnUnhandledPacket.BeginInvoke(header, packet, null, null);
                        }
                        break;
                    }
                }
            }
            catch (ThreadAbortException)
            {   // nie zadreczajmy uzytkownika tym wyjatkiem, w 99% powodowany przez Thread.Abort()
            }
            catch (Exception e)
            {
                if (Gadu.GaduCriticalError() == false)
                {
                    throw new GaduRecieverException(e.Message);
                }
            }
        }