/// <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); } }
/// <summary> /// Dodawanie numerku w czasie pracy /// </summary> /// <param name="gaduPacketNotify">Numer do dodania reprezentowany przez pakiet GaduPacketNotify</param> public void addNotify(GaduPacketNotify gaduPacketNotify) { GaduPacketHeader gaduPacketHeader = new GaduPacketHeader(); // naglowek gaduPacketHeader.Type = GaduPacketConstans.GG_ADD_NOTIFY; // ustawiamy odpowiedni typ pakiety gaduPacketHeader.Length = gaduPacketNotify.getSize(); // rozmiar pakiety gaduSender.sendPacket(gaduPacketHeader); // wysylamy naglowek gaduSender.sendPacket(gaduPacketNotify); // wysylamy pakiet }
/// <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); } } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <summary> /// Czyta dane z katalogu publicznego dotyczace naszego konta, wystarczy ze w GaduUser /// wypelnimy tylko pole Uin /// </summary> /// <param name="gaduUser">Nasze dane</param> public void Read(GaduUser gaduUser) { GaduPacketHeader gaduPacketHeader = new GaduPacketHeader(); GaduPacketPubDir50 gaduPacketPubDir50 = new GaduPacketPubDir50(); gaduPacketHeader.Type = GaduPacketConstans.GG_PUBDIR50_REQUEST; gaduPacketPubDir50.Type = GaduPacketConstans.GG_PUBDIR50_READ; gaduPacketPubDir50.Seq = (int)DateTime.Now.Ticks; gaduPacketPubDir50.Data = gaduUser.getPubDirString(); gaduPacketHeader.Length = gaduPacketPubDir50.getSize(); gaduSender.sendPacket(gaduPacketHeader); gaduSender.sendPacket(gaduPacketPubDir50); }