Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odbieranie wiadomości
Konnekt | Forum > Developerzy > Tworzenie wtyczek
mateuszn0
wiem że można bez problemu odbierać wiadomości tekstowe, ale jak zrobić żeby jak ktoś do mnie prześle obrazek to żeby mi wtyczka to pokazała że ktoś próbuje przesłać do mnie obrazek ?

i przy okazji czy musze gdzieś ustawiać żeby moja wtyczka jako pierwsza reagowała na wiadomości a dopiero potem przepuściła je do kolejnych wtyczek ?
Sija
mam wrazenie, ze na czesc Twoich pytan (jezeli nie na wszystkie) odpowiedzi sa w SDK. nastepnym razem przeszukaj SDK, a dopiero potem pisz tutaj.
winthux
QUOTE(mateuszn0 @ 11.05.2005 - 19:26)
wiem że można bez problemu odbierać wiadomości tekstowe, ale jak zrobić żeby jak ktoś do mnie prześle obrazek to żeby mi wtyczka to pokazała że ktoś próbuje przesłać do mnie obrazek ?

Jeśli chodzi o gg to trzeba się podłączyć pod GG, w SDK jest opisane jak to zrobić, później już operujesz na libgadu....

QUOTE(mateuszn0 @ 11.05.2005 - 19:26)
i przy okazji czy musze gdzieś ustawiać żeby moja wtyczka jako pierwsza reagowała na wiadomości a dopiero potem przepuściła je do kolejnych wtyczek ?
*


priorytety jakoś się ustawia... ale ja z tego nie korzystałem więc na razie nie pomogę Ci w tej kwestii....

p.s.
Sija - sdk jest strasznie nędznie opisane i dla początkującego ciężko się w nim połapać... a zwłaszcza jak chce coś konkretnego zrobić
mateuszn0
okej, dzięki, a tą bibliotekę libgadu to muszę skompilowąć ? bo nie mam tych plików z linuxa, czy mogę tylko wykorzystać nagłówki ze zdefiniowanymi strukturami które są mi potrzebne ? gg_session naprzykład libgadu.h , czy muszę kompilować a jak tak to jak skompilować pod win32 libgadu.c ? jak tam nie mam tych plików chyba że zlinkować razem z libgadu.lib.
dziękuję.
winthux
W katalogu w SDK masz źródła LibGadu....
skolima
Zlinkuj razem z libgadu.lib, powinno być gdzieś w sdk (albo tym ściągniętym przez kUpdate, albo na stronie).

@sija : ja też miałem (i mam) rozmaite problemy.. najpierw ze skompilowaniem chociażby przykładów, potem ze znalezieniem "jak to zrobić" albo "czemu nie działa". Generlanie zamiast pytać na forum gnębiłem kTeam... ale metoda mateuszn0 ma dużą zaletę : nie trzeba będzie tego ponownie już pisać. No i widać, czego w sdk brakuje.
MiLKA
Słowem wstępu - osobiście nie popieram sprawdzania czy ktoś jest online ale się ukrywa czy nie, jest to uderzeniem w cudzą prywatność - dlatego ta funkcja nie jest zaimplementowana w GGimage. Ale, widać, że jest chętny więc potroszku wytłumacze jak zrobić sprawdzanie obecności rozmówcy za pomocą wiadomości graficznych

--

Aby podłączyć się pod obsługe wiadomości GG należy:

CODE

// próbujemy rejestrować sie w gadugadu
IMessage (IM_GG_REGISTERHANDLER, NET_GG, IMT_PROTOCOL, GGER_EVENT);

// jeśli nikt nie obsłużył tej wiadomości to wywalamy błęda
if (Ctrl->getError () == IMERROR_UNSUPPORTEDMSG || ICMessage (IMC_FINDPLUG, NET_GG, IMT_ALL) == 0)
{
// wyłączamy wtyke
Ctrl->IMessage (&sIMessage_plugOut (ID, "Wtyczka GGimage nie będzie działać bez włączonej wtyczki GG!!", sIMessage_plugOut::erYes, sIMessage_plugOut::euNowAndOnNextStart));
// kończymy działanie funkcji
return -1;
}


GGimage podpina się jeszcze pod inne wiadomości, ale tutaj potrzebne jest tylko GGER_EVENT

następnie w IMessageProc musimy odpowiedzieć na pytanie

CODE

       // Odpowiadanie na odbierane wiadomości
       case IM_GG_EVENT: return HandleGGEvent (static_cast <sIMessage_GGEvent*> (msgBase));


gdzie HandeGGEvent to nasza funkcja, zdefiniowana następująco

CODE
int HandleGGEvent (sIMessage_GGEvent* event);

potem już należy obsłużyć odpowiednią wiadomość

CODE

// funkcja obsługująca zdarzenia wtyczki GG.dll
int HandleGGEvent (sIMessage_GGEvent* event)
{
// jeśli jest GGER_EVENT
if (event->eventType == GGER_EVENT)
{
// prośba o wysłanie obrazka
if (msg->type == GG_EVENT_IMAGE_REQUEST)
{
// zmienna z wiadomościa odebraną od serwera gg
gg_event* msg = static_cast <gg_event*> (event->data.event);

__ TUTAJ KOD __

}
}
// kończymy działanie funkcji
return 0;
}


--
Aby poprawnie to skompilować, zbudować i uruchomić to musisz mieć libgadu oraz libgadu.lib albo w ścieżkach albo w katalogu i odpowiednio ustawione katalogi. LibGadu wymaga również nagłówków biblioteki OpenSSL oraz standardowych linuxowych nagłówków których brakuje w VS.NET
hao
Libgadu.lib jest w tej paczce

http://www.konnekt.info/sdk/353.html

Wgrałem przed chwilą uaktualnioną wersję, chociaż stara też powinna zaskoczyć...

Dorzuciłem jeszcze katalog w32compat który trzeba dodać do ścieżek wyszukiwania żeby złapało wszystkie linuxowe nagłówki...

Dopóki nie używasz funkcji z libgadu _nie musisz_ linkować się z biblioteką libgadu.lib... Do obsługi komunikatów biblioteki wystarczą w zupełności same nagłówki...

Milka, bardzo ładnie to ująłeś wink.gif
mateuszn0
dziękuję bardzo.
niestety nie zdążyłem z tego skorzystać, gdyż włąsnie skończyłem pisać wtyczkę moją sprawdzającą niewidoczność użytkownika.
Bo ggimage ma tak że jak sprawdzam kogoś to on wie o tym bo do niego dojzie choćby najmniejszy obrazek, wię postannowiłem zrobić moją wtyczkę dostępną pod prawym menu, myśle że działa dobrze dzisiaj skończyłem więc robie testy,miałem problem z tym że jak ktoś mnie sprawdzał to też sie pokazywała u mnieinformacja że user jest aktywny bo tam komunikaty dochodziły image_request, ale sobie poradziłem ograniczając czas wiadomości że ma sie pokazać w ciągu iluś sekund a wprzeciwnym wypadku nie, tak wygląda mój kod, to moja pierwsza wtyczka w konnekcie więc może być trochu błędów
no i musiałem edytować nagłówkowe bo nie miałem z linucha plików.



//tu był kod ale już wywaliłem,

a mógłbym dostać jakąś wartość net ??? ???
aha i niezłe jest to SDK, dużo info tam jest w tym chm, tylko trzeba szukać.

do tak dużych kodów używaj codebox zamiast code // r
MiLKA
QUOTE(mateuszn0 @ 12.05.2005 - 20:40)
a mógłbym dostać jakąś wartość net ??? ???

http://www.kplugins.net/net.xml

wybierz stamtąd wolne, przyczym:

* poniżej 255 nie ruszamy
* nie doklejamy sie w kolejność innych autorów (np. ja mam 133x, gdzie X to kolejne wtyczki, nix ma 77x....)
* każdy identyfikator powinien mieć wartość = NET * 1000 + id_kolejne

... jak mi coś przyjdzie do głowy to dopisze

// edit

http://www.kplugins.net/sources.faworki/Source - kod faworków, jak by był pomocny :-] (to jest kod aktualnie dostępnej, nowy przerobiony jest jeszcze nie skończony)

http://www.kplugins.net/sources.knotes/ - kod knotesa, przy czym to jest kod wersjie developerskiej, porozdzielany na osobne pliki - nie wszystko w jednym
KoSiarzPL
hehe spojrzalem na pierwsza linijke twojego kodu i wolalem dalej nie patrzec wink.gif

nie uzywaj dyrektywy define, zamiast tego jest operator const. Pozdro kup sobie ksiazke do programowiania w C++.

to się _chyba_ tyczy kodu mateuszn0?? // milka
mateuszn0
pewnie chodzi ci o to ?
UWAGA !
Takie definiownie stałych było często używane w C. W C++ jest to zła praktyka i raczej nie stosowana, ze względu na jej niebezpieczeństwo (brak sprawdzania zgodności typów). Dlatego też zalecam używanie słowa kluczowego const, ponieważ jednocześnie deklarujemy typ takiej zmiennej, a kompilator sprawdza czy poprawnie używaliśmy naszej stałej np. w funkcjach. Jeśli tylko to możliwe w kodzie wynikowym programu nie będzie przydzielana pamięć dla naszej stałej zadeklarowanej jako const (używając #define mamy pewność, że pamięć nie będzie alokowana, co może spowodować wzrost wydajności), więc nie musimy się obawiać o spadek wydajności w prównaniu z użyciem #define. Pamięć jest alokowana dla const tylko wtedy kiedy odwołujemy się w programie do adresu pamięci w którym jest przechowywany const, co i tak nie było możliwe przy użyciu #define. Mimo to #define jest nadal używane, ponieważ może łatwo wpłynąć na wielkość i przejrzystość kodu.
//////////////////////////////////////////////////////////////////////////////
w sdk też jest dużo #define.
i myślisz że w kodzie w którym tego użyłem ma zastosowanie powyższy cytat ?
tak ale tylko dla tego fragmentu : ponieważ może łatwo wpłynąć na wielkość i przejrzystość kodu.
oryginalnie i tak mam const.
Dzięki ze zwróciłeś na to uwage.
Jak coś jeszcze znajdziesz to napisz.
Aule
KoSiarz, on ma racje, nawet w SDK używane jest #define. Ja ostatnio zamiast #define używam:

CODE
namespace plug
{
 enum
 {
   net=256,
   kontrolka1 = plug_const::net*1000,
   kontrolka2, kontrolka3
   // ...
 };
 namespace Cfg
 {
   // tu kontrolki
 };
};

Taki sposób jest bardziej przejrzysty i nie trzeba pamiętać nazw kontrolek, akcji i innych stałych smile.gif .
KoSiarzPL
Tak tak mowilem do mateusza. Nie jestem pewny ale czy konnekt nie byl pisany kiedy w C? Zreszta nie wazne. to ze sdk zawiera define to nie znaczy ze ty powinienes wink.gif
Enum a const to dwie rozne sprawy hehe. Enum jest dobre wlasnie dla nadawania takich identyfikatorow dla puli zmiennych (tez to stosuje). Ze zmienna const mozna zrobic duzo wiecej niz z enum a w dodatku enum nadaje tylko wartosci calkowite. Zreszta co ja sie rozwijam hehe. Tak czy siak mateusz zycze powodzenia smile.gif

Aha radze uzywac jednej spacji po obu stronach wszelkich operatorow jak =, ==, + itp.
Aule
Hehe. Jeżeli potrzebne są identyfikatory, to enum pasuje jak ulał, bo nie trzeba sie bawić z numeracją kolejnych kontrolek i identyfiaktory mają być liczbami całkowitymi, prawda?

Co do kodu mateusza0 to zgodze się, że lepiej pasowałoby const int.
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.