Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo istotne uwagi co do nowego SDK...
Konnekt | Forum > Inne > Archiwum > Wtyczki > @dev
hao
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
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.
hao
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??
hao
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
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 ??
hao
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 smile.gif
Maciej_Kowalewski
to ja z nowym wapilotem czekam smile.gif
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.