Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kJabber
Konnekt | Forum > Developerzy > Tworzenie wtyczek
KoSiarzPL
Troche was dzisiaj pomęczę dzisiaj.
Wysyłąjąc komunikat
CODE
jabSession = (jabberoo::Session *) IMessage( kJabber::IM::getSession, kJabber::net );

po otrzymaniu komunikatu IM_ALLPLUGINSINITIALIZED zawsze otrzymuję w wyniku zero. Źle próbuję pobrać obiekt sesji?
Olórin
W IStart rób to. IM_ALLPLUGINSINITIALIZED wysyłane jest po wysłaniu wszędzie IInit, kiedy wtyczki jeszcze nie rozpoczęły pracy - możliwe jest wtedy odłączenie wtyczki bez restartu K (chyba).
KoSiarzPL
Masz racje. Dalej jednak mam problem.
Czy IMessage( kJabber::IM::getSession, kJabber::net ); zwracam mi wartość typu (jabberoo::Session *)? Bo przy próbie odwołania sie do zwróconego obiektu dostaje krytyka. Może w parametrze on zwraca wartość?
hao
CODE
case kJabber::IM::getSession:
        return (int)&this->session;


A session jest typu jabberoo::Session.

Jakiego kompilatora używasz? Daj mi swoj email na gg to ci podesle aktualne zrodla z svn'a, bo moze jest jakas niezgodnosc...
KoSiarzPL
Żesz kurde. Używałem wersji lib i dll i dla obu wersji debug i release. Ten sam rezultat, czyli krytyk podczas operacji:
CODE
jabberoo::Session* jabSession = (jabberoo::Session *) IMessage( kJabber::IM::getSession, kJabber::net );
    if( jabSession == 0 || jabSession->getConnState() != 4 )
    {
        IMessage(IMI_INFORM , 0 , 0 , (int)"jabSession == 0 lub brak polaczenia" );
        return 1;
    }

Oczywiście wywala się przy "jabSession->getConnState()". Podczas wykonywania tej operacji zawsze byłem połączony z serwerem jabbera.
Jakieś pomysły?
Olórin
A kompilator przypadkiem nie sprawdza wszystkich warunków, nawet jeżeli tylko 1 jest wymagany?
KoSiarzPL
No co ty Olórin smile.gif nigdy tak nie jest. Nawet jeśli by mu się chciało to jabSession napewno jest różne od zera.
hao
Ponawiam pytanie - jakiego kompilatora używasz? Czy korzystasz z wersji SVNowej, którą ci wysłałem? Jaką wartość przyjmuje jabSession (może to jakiś debugowy pattern?).

getConnState jest zadeklarowany w nagłówku, czyli nie jest uruchamiany z DLL'a, a co za tym idzie - albo masz zły wskaźnik, albo Twój kompilator ma inne rozmiary struktur.

Session zawiera w sobie sporo struktur, w których różnica w rozmiarze (wg. kompilatora) może prowadzić do takich błędów. Poza tym getConnState jest super prostą f-cją, więc wygląda na to, że jabSession zawiera nieprawidłowy wskaźnik. Patrzyłeś co ma na temat do powiedzenia debugger (np. czy zawartość jest poprawnie zainicjalizowana?)
KoSiarzPL
Pisalem Ci ze nie mam dostepu do tego erpozytorium na svn. Testowalem na wersji z katalogu oraz tej z maila od ciebie. Tez mi to wyglada na bledny wskaznik. Na debugerze nie sprawzdalem mam jeszcze kilka innych pomyslow. Sprawdze je w wolnym czasie.
riddle
Sory, że się wtrącam ale nadal nie napisałeś jakiego komp. używasz. biggrin.gif
hao
Właśnie, jak z tym kompilatorem??

Używaj koniecznie tych źródeł co ci wysłałem w mailu. To to samo, co byś sobie wyciągnął z SVNa, do którego nie mogę ci dać dostępu... bo nie mam do tego dostępu smile.gif Jeżeli zrobisz modyfikację na kopii z katalogu, będzie sporo zabawy ze zintegrowaniem tego z "oficjalną" kopią. Na kopii ode mnie z maila tortoisesvn stworzy ci za to pięknego diffa.

Poza tym, debugowanie jest zawsze PIERWSZĄ rzeczą jaką należy zrobić, zanim zacznie testować się jakiekolwiek inne pomysły! Nie wiem czemu macie na to wszyscy taką dziwną alergię?
KoSiarzPL
Zapominam o podaniu tego kompilatora. Używam tego z MVS 2003 Pro.
Po zdebugowaniu mam tak:
linia (jabberoo::Session *) IMessage( kJabber::IM::getSession, kJabber::net );
Zwraca mi wskaźnik o adresie 0x00000001, który jest błędny
no i w momęcie odwołania się do tego obiektu dostaję błąd.

Dla formalności:
getSession = 12000
net = 12
KoSiarzPL
Tak mnie ciekawi, czy testowałeś kiedyś jak działa ten komunikat. Jeśli nie to spróbuj.
KoSiarzPL
Ok wysyłanie powiadomień już mam obcykane. Postanowiłem jednak skorzystać z konnektowych komunikatów a to dlatego iż PSI ma również w ten sam sposób obsługiwany ten komunikat.
Pojawił się jednak problem. Strasznie długo trzeba czekać aż konnekt mi powie że przestałem pisać, da się jakoś zmienić tą wartość?
Olórin
Koniecznie zrób negocjowanie obsługi tego typu funkcji (JEP chyba przewiduje). Osobom łączącym się przez GPRS raczej się ona nie spodoba...
KoSiarzPL
No to pamiętać, nie używać tej wtyczki jeśli rozmawiasz z kimś kto aktualnie używa komórki, chyba że jest bogaty wink.gif
A tak poważnie to nie zauważyłem by było można negocjować użycie tej funkcji.
Olórin
Tutaj jest: http://www.jabber.org/jeps/jep-0155.html ale to jeszcze nie jest wersja końcowa, więc pewnie nic nie obsługuje. W każdym bądź razie zadałem pytanie na jabberpl.
Olórin
Tutaj masz wyczerpującą odpowiedź: http://forum.jabberpl.org/index.php?showtopic=4227. A przypadki że K wyświetla puste wiadomości to tak na prawde błąd wysyłających klientów, które nie negocjowały obsługi tego ficzera wink.gif
KoSiarzPL
Dzięki. W przyszłej wersji to uwzględnię a sama wtyczka już działa. Jednak przez ten błąd w Konnekcie na razie jej używanie jest frustrujące. Bo czy ktoś negocjuje czy nie negocjuje to jedna kwestia ale K nie powinien wyświetlać wiadomości które nie posiadają elementu <body>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.