Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Informacje o kontakcie
Konnekt | Forum > Developerzy > Tworzenie wtyczek
KoSiarzPL
Proszę o podanie następujących informacji:
- jakie pole przechowuje identyfikator kontaktu w sieci (strzelam, że CNT_UID)
- CNT_GROUP to tekstowa nazwa grupy?
- jakie wartosci przybiera CNT_STATUS
- prosze o podanie sposobu zapisania daty majac int rok, miesiac, dzien tak by byla odpowiednia dla CNT_BORN. Oraz aby wynik otrzymany z tej kolumny podzielic na trzy inty
hao
1) Tak, CNT_UID
2) Zgadza się
3) ST_* (0-0xFF) plus flagi ST_* (>= 0x100). Żeby dobrać się do samego statusu trzeba go pobrać jako GETCNTI(id, CNT_STATUS) & ST_MASK
Do ustawiania statusu powinna być używana f-cja CntSetStatus
4) Wg. SDK:

Urodzony YYYYMMDD (w hexie)

czyli

CODE
((rok & 0xFFFF) << 16) | ((mies & 0xFF) << 8) | (dzien & 0xFF)


KoSiarzPL
Mam problem z dobraniem odpowiedników dla oznaczen statusów (na przykladzie jabbera):
- nie_osiagalny (ST_NA ?)
- zraz_wracam (ST_AWAY ?)
- pogadam (ST_CHAT (ICQ) ?)

Co oznaczaja statusy:
- ST_BLOCKING (Blokujący (GG) )
- ST_HIDESHISSTATUS (Kontakt nie podaje nam swojego statusu) - czyli nie mamy autoryzacji?

Czy jeśli zrobie tak jak mówiłeś:
GETCNTI(id, CNT_STATUS) & ST_MASK
Mam pewność, że wynik będzie RÓWNY, JEDNEMU z ST_ < ST_SPECIAL. Chce otrzymać konkretny status (czyli dostepny, niedostepny, ...) ale nie interesuje mnie jaki to będzie. Muszę uwzględnić w wyniku ST_SEMIONLINE? (to całe ST_BLOCKING mnie martwi)
hao
1) Tak jest w istocie

2) ST_BLOCKING - Kontakt nas ignoruje - status "zwykły"
ST_HIDESHISSTATUS - flaga oznaczająca, że nie mamy u niego autoryzacji

3) Tak, absolutną. Zobacz w nagłówku które statusy są poniżej 0xFF.

ST_SEMIONLINE to taki rozdzielacz statusów online od tych "pół online" jak away.
KoSiarzPL
1. Czy jeśli mamy 123 kontakty to id każdego kontaktu jest < 123 (pewnie tak smile.gif )
2. Co się dzieje jeśli próbuję odczytac jakąś wartość z nieistniejącego kontaktu (funkcja zwraca false, rzuca wyjątek, wyłącza konnekta)
3. Co sie dzieje jeśli próbuję zapisać jakąś wartość pod nieistniejący kontakt (funkcja zwraca false, rzuca wyjątek, wyłącza konnekta)
4. Co sie dzieje jeśli próbuję zapisać/odczytać z istniejącego kontaktu, nie istniejące pole.
5. Czy ustawienie statusu ST_IGNORED kontaktu jest rownoznaczne z jego ignorowaniem czy musze wykonać jeszce IMC_IGN_ADD?
hao
1) Niekoniecznie... Id kontaktów może przyjmować dwie wartości...
Może to być liczba od 0 do Liczba_kontaktów - 1, która oznacza lokalizację kontaktu w tablicy kontaktów,
lub może być to liczba od 0x40000000 do 0x3FFFFFFF oznaczająca unikalny identyfikator kontaktu, który nie ma żadnego związku z kolejnością kontaktów ani ich liczbą - każdy kontakt ma inny, zwolnione identyfikatory nie są ponownie używane.

Obu można używać zamiennie, przy czym drugi jest oczywiście bardziej zalecany, bo nie ma zagrożenia, że lista zmieni się w połowie naszej operacji...

Do sprawdzenia czy kontakt o podanym ID istnieje można:
CODE
Ctrl->DTgetPos(DTCNT, id_kontaktu) != -1

Najbezpieczniejsza wersja tego sprawdzenia, niezależna od tego w jakiej "konwencji" mamy identyfikator jest taka:
CODE
Ctrl->DTgetPos(DTCNT, Ctrl->DTgetID(id_kontaktu)) != -1


2) Zwraca false

3) Zwraca false

4) Zwraca false

5) Nie ustawiaj ST_IGNORED, użyj tylko IMC_IGN_ADD
KoSiarzPL
2/4) No ciekawe jak mam odróżnić zwrócony wynik od komunikatu "błędu" (podczas odczytywania). Jeśli chcę być pewien to powinienem w (2) sprawdzać czy kontakt istineje a w (4) ?

5) Dlaczego mam nie ustawiać tego statusu? Służą one tylko do odczytu? A co z pozostałymi statusami jak ST_NOTINLIST, ST_HIDESHISSTATUS, ST_HIDEMYSTATUS.

1) No właśnie, gdzieś przeczytałem o tym "innym" id i nie wiedziałem o co chodzi. Więc każdy kontakt posiada dwa różne ID?

Czy ID < liczba_kontaktow są przydzielane jakoś specjalnie (np w kolejności alfabetycznej) czy przydzielany jest pierwszy wolny? Czy też mam mieć to gdzieś i używać ich tylko do pobrania duzeID.

IDmale kontaktu może sie zmienić? Kiedy? Chyba jeśli mam kontakt z pewnym IDmale to nagle sie nie zmieni to ID. Co najwyżej ktoś może usunąć kontakt i IDmale zostanie przydzielone komuś innemu ale w przypadku dodawania kontaktu, edytowania, itp on się nie zmieni (tak mniemam).

Ech troche lepiej zaczynam rozumieć mechanizm konnekta. Będe musiał wszystko na nowo przemyśleć.

6) Jakie wartości przyjmuje CNT_NET. Jest on RÓWNA z wartościami NET wtyczek takich jak gg, kjabber, tlen? Czy zalicza się również do nich transporty? Czy i kiedy wartość ta jest różna od wymienionych przezemnie.

7) Jeśli robie Ctrl->DTgetID(DTCNT, id_kontaktu) to bez wzgledu czy podam maleId czy duzeID dostene poprawne poprawne duzeID? Jeśli podam niepoprawne id to otrzymam -1. Tak?

8) Nie mogę teraz tego znaleźć ale wyczytałem gdzieś, że id kontaktu to "unsigned int" natomiast wszystkie funkcje zwracające liczby, zwracają typ int. Więc jak to jest?

9) Co się dzieje z kontaktami zawartymi w grupe dla której wykonuję IMC_GRP_DEL

10) Co zwraca kontakt który nie jest przyopisany do żadnej grupy a wywołana zostałą dla niego CNT_GROUP. Czyli inaczej jak identyfikowane są kontakty nie przypisani do żadnej grupy.

11) To samo co wyżej, co się dzieje z kontaktami po wywołaniu IMC_GRP_RENAME

12) Wysylać IMC_CNT_CHANGED, gdy kontakt zostanie usunięty? W dokumentacji jest wspomniane tylko o dodawaniu.
KoSiarzPL
Halo, czy ktoś może mi odpowiedzieć na moje pytania? Wiem, że większość rzeczy mogę sprawdzić w praktyce. Jednak nie każcie mi się zastanawiać czy wynik który otrzymałem to przypadek czy zawsze tak będzie. Poza tym czas jaki ja poświęce na pełne testowanie moich pytań jest nie proporcjonalny do czasu jaki potrzeba na udzielenie odpowiedzi przez osobe znającej się na tym.
Aule
5. Służą one tylko do odczytu, znaczy pewnie ustawić możesz, ale to Ci nic nie da.
6. Tylko net jabbera, tlena i gg.
7. wg. SDK:
QUOTE
DTgetID (tTable db, unsigned int row)
  Zamienia (lub nie) numer wiersza na jego identyfikator.
hao
Nie zauważyłem tego posta...

2/4) Funkcje Dorset* zwracają bool'a

5) Niektóre są tylko do odczytu, niektóre nie... O ile pamiętam, jabber nie reaguje na zmiany ST_HIDE* i nie wysyła komunikatów autoryzacji... Ale np. UI reaguje na zmianę ST_NOTINLIST, a GG na ST_HIDEMYSTATUS:

Co istotne, flagi statusu ustawia się przez SETCNTI, wykorzystując maskowanie i wysyłając komunikat o zmianie w kontakcie...
CODE
SETCNTI(an->act.cnt , CNT_STATUS , 0 , ST_NOTINLIST);
ICMessage(IMC_CNT_CHANGED , an->act.cnt);


1) Nie, myślę że to proste... Wszystko co jest mniejsze od DT_ROWID_MASK (0x40000000) oznacza POZYCJĘ w tablicy (dotyczy to zarówno kontaktów, jak i wiadomości, oraz wszystkiego innego opartego o tablice danych). Pozycja w tablicy jak wiadomo może się zmieniać dowolnie, ten rodzaj id służy do iteracyjnego, szybkiego przeglądania tablic...
Wszystkie ID powyżej tej granicy są identyfikatorami stałymi i unikalnymi. Po usunięciu kontaktu żaden inny nigdy nie otrzyma go ponownie...
Oba id są zamienne, f-cje rozumieją je przezroczyście... Żeby upewnić się czy mamy pozycję na liście używamy DTgetPos(), żeby upewnić się że mamy ID używamy DTgetId()

6) CNT_NET przyjmuje wartość sieci (IM_PLUG_NET) obsługującej ją wtyczki... W przypadku Jabbera będzie to tylko NET_JABBER, niezależnie od sieci w transporcie, ew. któryś z dynamicznie przydzielanych netów dla kopii wtyczki Jabber

7) Tak, j.w.

8) Whatever wink.gif signed int i unsigned int można bezstratnie cast'ować między sobą. API w obecnym stadium nie przywiązuje dużej wagi do poprawności typów, co oczywiście obecnie się zmienia... Dla własnego bezpieczeństwa używaj typu tCntId.

9) Mają czyszczoną przydzieloną grupę

10) Pustym stringiem

11) Wszystkie kontakty są aktualizowane o nową wartość

12) Nie.. CNT_CHANGED wysyłane jest tylko po zmianie witalnych parametrów kontaktu... (czyli po dodaniu i np. zmianie UID / Net, ważnych flag itd).
KoSiarzPL
QUOTE(hao @ 10.12.2005 - 10:40)
8) Dla własnego bezpieczeństwa używaj typu tCntId.


Tylko powiedz mi gdzie jest zdefiniowany ten typ. W SDK jest napisane, że plug.h. Wchodze no faktycznie w plug.h w sdk jest. W swoim patrze nie ma. Przeszukałem wszystkie nagłówki, nie ma. Sprawdzam aktualizacje w centralkach, brak SDK. Ściągam sdk ze stronki tam tez nie ma
CODE
typedef unsigned int tCntId

hao
No to sobie go wklej smile.gif Powinno być na SVNie
KoSiarzPL
Zgadza się. Troche rozbudowane to nowe sdk wink.gif Troche posiedzicie nad dokumentacja laugh.gif (tak jak ja sie męcze teraaz ze swoją)
Nie no ludziska a przykłady dalej nie poprawione!
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.