Projekt Konnekt ma już ładne kilka miesięcy i zdąrzyło się w nim sporo rzeczy pozmieniać. W nadchodzącym SDK znajdzie się sporo zmian, które będę kontynuował w każdej następnej edycji.
Do rzeczy... "System" wiadomości na którym chodzi konnekt wprowadziłem w życie dużo wcześniej, we wcześniejszym projekcie. To co aktualnie widzicie w SDK ma już z tamtym niewiele wspólnego, ale pozostaje kilka rzeczy, które w końcu trzeba będzie usprawnić. Mianowicie bezpieczeństwo typów... W tej chwili, wszystko przesyłane jest jako dwu-parametrowe wiadomości z 4 bajtową wartością zwrotną... Wszystko fajnie, ale problem pojawia się przy sprawdzaniu zgodności typów i generalnie, podczas pisania... Można co prawda stworzyć rzeszę pomocniczych funkcji (i tak z resztą będzie), ale nie do końca o to chodzi...
Dotąd, do IMessageProc i IM_ACTION docierały wskaźniki do struktur z dwoma 4 bajtowymi parametrami. Od następnej wersji, dochodził będzie wskaźnik do struktury bazowej, nie zawierającej żadnych parametrów. Dopiero w zależności od przesyłanej wiadomości (i rozmiaru struktury) będziemy interpretować te wskaźniki jako odpowiednie struktury.
Powoli będę też tworzył różne struktury dla różnych wiadomości i odpowiadające im f-cje pomocnicze... Np. żeby wysłać IMI_INFORM, teraz robimy to tak:
ICMessage(IMI_INFORM , (int)"info");
Nie trudno się domyśleć co się stanie, jeśli jako parametr pierwszy omyłkowo prześlemy np. wartość 1!
Dlatego w przyszłości zamiast przesyłać strukturę IMessage z dwoma int'owymi parametrami, prześlemy strukturę np. sIMI_NOTIFY z parametrem typu (const char *), a całą akcję wywołamy poprzez np.
UINotify("info");
Tyle że wszystkie f-cje pomocnicze zadeklarowane byłyby (i wkompilowane) w samą wtyczkę.
W ten sposób wtyczki nadal są w pełni niezależne od pozostałych wtyczek i programu, a dzięki pozostawieniu prostych struktur jako narzędzia komunikacji można pisać wtyczki w wielu różnych językach programowania...
Samo przejście na nowe typy struktur wymaga kilku drobniutkich zmian w kodzie, które będziecie mogli zobaczyć w template.cpp
Nowe SDK wyjdzie razem z nowym Konnektem... Aktualny konnekt jak najbardziej obsługuje opisaną tu technikę, tyle tylko, że nie ma w SDK wydzielonych struktur bazowych...
winthux
13.10.2002 - 16:00
To SDK wydaje mi się trochę poplątane... Daje dużo możliwości ale jest skomplikowane. Nie można by było trochę tego uprościć?
P.S.
Można się jakoś dobrać do statusów gg z innej wtyczki? Zmieniać je, dawać opisy.. itp.
Wydaje się poplątane bo przede wszystkim nie ma pełnej dokumentacji, a referencje nie zawsze wystarczają żeby do wszystkiego dotrzeć... Zmiany które będę systematycznie wprowadzał powinny sprawę trochę uprościć...
Statusy zmieniać można tak:
dopisać sobie:
#define IM_CHANGESTATUS IM_BASE+3005
a potem:
IMessage(IM_CHANGESTATUS , NET_GG , IMT_PROTOCOL , status , (int)"Opis");
Przy czym podanie -1 jako status pozostawi aktualny status, a 0 jako opis, pozostawi aktualny opis...
Ten komunikat został dodany przy ostatniej poprawce gg.dll i jeszcze nie jest oficjalnie zawarty w SDK.
A tak w ogóle, co uważasz za najbardziej poplątane??
No, to teraz już na bank żadna stara wtyczka nie zadziała z nowym konnektem... Spora część identyfikatorów wiadomości do wtyczek przeszła do grupy > IM_SHARE, tak, aby mogły sobie te wiadomości przesyłać między sobą wtyczki...
W rdzeniu, UI, a teraz i całym API (i SDK) będzie masa!
winthux
14.10.2002 - 10:09
ja jeszcze odnośnie tej zmiany statusu gg...
#define IM_CHANGESTATUS IM_BASE+3005
IMessage(IM_CHANGESTATUS , NET_GG , IMT_PROTOCOL , -1 , (int)"Opis");
wrzuciłem to do ActionProc (do tego o czym wczoraj rozmawialiśmy ;P) przed tym wpisem dodałem IMLOG i to działa... ale zmiana statusu nie... jak dodaje IM_PLUG_NETNAME zwracam mu NET_GG, aby obsługiwać tą sieć to mi się zwiesze... więc jak się dobrać do zmiany tego statusu ? Trzeba dodać do IM_PLUG_TYPE IMT_PROTOCOL ??
Niee. ty nie masz obsługiwać tej wiadomości tylko ją wysłać... Nie możesz udawać swoją wtyczką że jest klientem seici GG...
Na IM_PLUG_NETNAME odpowiada się tekstem (char*)
Ok, ale już wiem w czym jest problem... Z rozbiegu ponadawałem wszystkim komunikatom do wtyczek numeracje IM_BASE+... a rdzeń zabrania wtyczkom wysyłania tego typu wiadomości do innych wtyczek. W nowej wersji wszystkie wiadomości które mogą być przesyłane pomiędzy wtyczkami będą definiowane jako IM_SHARE+...
Póki co, jest jedno miejsce, gdzie nie jest to sprawdzane.. Możesz przesłać tą wiadomość do wtyczki Gadu poprzez IMessageDirect... Jest z tym trochę zachodu i lepiej poczekać jednak do nowego SDK
Maciej_Kowalewski
14.10.2002 - 16:56
to ja z nowym wapilotem czekam
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.