[C#][sHGG] PubDirSearch(); - zwrócone dane.

0

Witam

Zacząłem korzystać z sHGG, wysyłam i odczytuję wiadomości, zmieniam opisy etc., ale nie mam pojęcia skąd wziąć numerGG osoby, którą wyszukałem w katalogu publicznym za pomocą metody PubDirSearch();.

Próbowałem coś robić:
Metoda:
gadu.PubDirSearch(0, "", "", "", "1960 1980", "", GGGender.Female, true);

Zdarzenie, które informuje o wynikach szukania w katalogu publicznym:
gadu.GGSearchReply+= new sHGG.GenericEventHandler<sHGG.SearchReplyEventArgs>(gadu_GGSearchReply);

I napisałem obsługę tego zdarzenia, a mianowicie:

public static void gadu_GGSearchReply(object sender, sHGG.SearchReplyEventArgs args)
        {
            // TUTAJ nie wiem jak odczytać dane na przykład numer GG wyszukanej osoby/osób. Chcę je "wpakować" w jakąś zmienną.
        }

Wielkie dzięki za wskazówki. ;-)

0

Jeśli to czego używasz jest zgodne z tym http://code.google.com/p/shgg/source/browse/trunk/source/SHGG.cs?r=2 to:

args.Users[0].GGNumber
Oczywiście Users to kolekcja więc może być więcej zwróconych wyników jak i żadnego.

0

Dzięki.

Utworzyłem zmienną statyczną publiczną:
public static int numberGadu = 0;

A kod obsługi eventa wygląda tak:

public static void gaduBot_GGSearchReply(object sender, sHGG.SearchReplyEventArgs args)
        {
            numberGadu = args.Users[0].GGNumber;
        }

Gdy w programie piszę:

do
                {
                    gaduBot.PubDirSearch(0, "", "", "", "1960 1980", "", GGGender.Female, true);
                } while (numberGadu == 0);

to cały czas losuje ten sam numer, to znaczy zmienna numberGadu ma wartość 1010. O co chodzi?

0

Pewnie taki numer ma pierwszy znaleziony użytkownik. Pamiętaj, że users to lista. Zwróconych rekordów jest od 0 do Users.Count-1.

0

Dzięki za wskazówki, jednak mam jeden problem.

Zrobiłem tak:
Utworzyłem tablicę numberGadu oraz zmienną IndexMax, której wartość będzie się równać z ilością znalezionych numerów przez funkcję w tytule:

public static int[] numberGadu;
        public static int IndexMax;

Teraz obsługa eventu wygląda tak:

public static void gaduBot_GGSearchReply(object sender, sHGG.SearchReplyEventArgs args)
        {
            IndexMax = args.Users.Count - 1;

            for (int i = 0; i <= args.Users.Count; ++i)
            {
                numberGadu[i] = args.Users[i].GGNumber;
            }
        }

W ten sposób zdobyłem każdy numer.

W metodzie Main wyświetlam je w taki prosty sposób:

for(int j = 0; j <= IndexMax; ++j)
            {
                Console.WriteLine(numberGadu[j]);
            }

A gdy włączam program, to pisze mi:

Musisz się zalogować aby wywołać operację

Adres IP, login i hasło mam poprawne...

A i jeszcze jedno. Wyświetla mi warning:

Field 'GaduGadu.Program.numberGadu' is never assigned to, and will always have its default value null

Proszę o pomoc.

0
carck3r napisał(a)

A i jeszcze jedno. Wyświetla mi warning:

Field 'GaduGadu.Program.numberGadu' is never assigned to, and will always have its default value null

Proszę o pomoc.

Co do tego to dobrze jakbyś stworzył tę tablicę przed użyciem:
numberGadu = new int[args.Users.Count];
Co do zalogowania się to nie wiem dlaczego taki komunikat dostajesz. Może coś trzeba zrobić jeszcze prócz zalogowania się.

0

Teraz zgłupiałem.
Wyświetla mi błąd:

Object reference not set to an instance of an object.

A podświetla ten kod:
Console.WriteLine(numberGadu[j]);

Zalogować się już mogę.

0

Pokaż cały kod.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using HAKGERSoft;

namespace GaduGadu
{
    class Program
    {
        public static int[] numberGadu;
        

        public static int IndexMax;

        static void Main(string[] args)
        {
            sHGG gadu = new sHGG(); // nowy obiekt klasy sHGG

            gadu.GGSearchReply += new sHGG.GenericEventHandler<sHGG.SearchReplyEventArgs>(gadu_GGSearchReply);
            gadu.GGLogged += new sHGG.GenericEventHandler<EventArgs>(gadu_GGLogged);
            gadu.GGLogFailed += new sHGG.GenericEventHandler<EventArgs>(gadu_GGLogFailed);
            gadu.GGMessageReceive += new sHGG.GenericEventHandler<sHGG.MessageReceiveEventArgs>(gadu_GGMessageReceive);
            /* ------------------------------------ */
            /* -------------- <DANE> -------------- */
            /* ------------------------------------ */

            gadu.GGNumber = "7361806"; // login
            gadu.GGPassword = "x"; // hasło

            /* -------------- </DANE> -------------- */

            gadu.GGLogin("91.197.13.76");
            gadu.GGStatus = GGStatusType.Available;


            System.Threading.Thread.Sleep(2000);
            gadu.PubDirSearch(0, "", "", "", "1960 1980", "", GGGender.Female, true);
            for(int j = 0; j <= IndexMax; ++j)
            {
                Console.WriteLine(numberGadu[j]);
            }

            Console.ReadLine();
            gadu.GGLogout();
        }

        public static void gadu_GGMessageReceive(object sender, sHGG.MessageReceiveEventArgs args)
        {
            using (StreamWriter sw = new StreamWriter("log.txt", true))
            {
                sw.WriteLine("Time: " + args.Time + " *** Numer: " + args.Number + " *** Wiadomość: " + args.Message);
            }
            Console.WriteLine("***MESSAGE***: " + args.Message + "\n***TIME******: " + args.Time + "\n***NUMBER****: " + args.Number + "\n------------------------------------------------\n");
        }

        public static void gadu_GGLogFailed(object sender, EventArgs args)
        {
            Console.WriteLine("Blad logowania");
            return;
        }

        public static void gadu_GGLogged(object sender, EventArgs args)
        {
            Console.WriteLine("Logged in");

        }


        public static void gadu_GGSearchReply(object sender, sHGG.SearchReplyEventArgs args)
        {
            IndexMax = args.Users.Count - 1;

            for (int i = 0; i <= args.Users.Count; ++i)
            {
                numberGadu[i] = args.Users[i].GGNumber;
            }
        }
    }
}

Proszę bardzo.

0

IndexMax = args.Users.Count - 1;

        for (int i = 0; i <= args.Users.Count; ++i)
        {
            numberGadu[i] = args.Users[i].GGNumber;
        }

Tworzysz zmienną do trzymania wartości granicznej a z niej nie korzystasz? Wychodzisz poza zakres.
0

Stwórz tablicę zanim z niej skorzystasz. W metodzie gadu_GGSearchReply dodaj
numberGadu = new int[args.Users.Count];
Poza tym jak wspomniał użytkownik powyżej wychodzisz poza tablicę.

0

Ok, zrobiłem. Dzięki.

Jak będę miał jakieś problemy, to napiszę. :)

0

Iteruj od 0 do IndexMax-1 tylko tyle elementów jest. Czyli
for(int i =0; i<IndexMax;++i)
albo
for(int i =0; i<=IndexMax-1;++i)</code>

0

Też nie, w kodzie widnieje

IndexMax = args.Users.Count - 1;


więc

<code class="c#">for(int i = 0; i < args.Users.Count; ++i)

albo
for(int i = 0; i <= IndexMax; ++i)

0

Rzeczywiście. Przegapiłem to. Czyli tylko problem z tworzeniem tablicy był.

1 użytkowników online, w tym zalogowanych: 0, gości: 1