Autor Wątek: wysyłanie wiadomości  (Przeczytany 2978 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
wysyłanie wiadomości
« dnia: Marzec 01, 2010, 14:22:29 pm »
Jak wysłać wiadomość przez wtyczkę(chyba bardziej nie muszę tego opisywać)?
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: wysyłanie wiadomości
« Odpowiedź #1 dnia: Marzec 01, 2010, 16:21:05 pm »
WTW_PF_MESSAGE_SEND

używane jakoś tak:

wchar_t _f[255] = {0};
wsprintf(_f, L"%s/%d/%s", L"XMPP", 1, WTW_PF_MESSAGE_SEND);
pF->fnCall(_f, (WTW_PARAM)&msg, 0);

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #2 dnia: Marzec 01, 2010, 18:18:32 pm »
A można trochę dokładniej?
msg to ma być wtwMessageDef, jaką funkcję pełni 1 w drugiej linijce?
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: wysyłanie wiadomości
« Odpowiedź #3 dnia: Marzec 01, 2010, 18:37:14 pm »
wtwMesageDef*, jedynka pełni rolę sid-a, jesli jest wiecej niz jedna siec XMPP to wtedy po 1, 2, 3 czy ilus tam sa rozrozniane sieci

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #4 dnia: Marzec 01, 2010, 22:48:21 pm »
A czy da się wykorzystać wtwMesageDef* przekazany do funkcji obsługującej eventy protokołu, żeby odpowiedzieć taką samą wiadomością?

WTW_PTR ProtoProcess(WTW_PARAM wP, WTW_PARAM wL, void*){
wtwProtocolEvent *proto = (wtwProtocolEvent *) wP;
if(proto->event == WTW_PEV_MESSAGE_RECV) {
wtwMessageDef *msg = (wtwMessageDef *) wL;
if(!wcscmp(msg->msgMessage,L"test")){
wchar_t _f[255] = {0};
wsprintf(_f, L"%s/%d/%s", msg->contactData.netID, 1, WTW_PF_MESSAGE_SEND);
wtw->fnCall(_f, (WTW_PARAM)&msg, 0);
return BMD_FORCE_NO_DISP;
}else{
return BMD_OK;
}
}
return 0;
}

Normalne wiadomości zgodnie z oczekiwaniem przechodzą bez problemów, wiadomość o treści "test" poza niewyświetleniem(zamierzone) nic nie robi. Co trzeba edytować w przychodzącej wiadomości, żeby móc ją odesłać?
(mam po jednym koncie gg  w obu instancjach wtw)
« Ostatnia zmiana: Marzec 03, 2010, 21:35:13 pm wysłana przez Siwy »
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: wysyłanie wiadomości
« Odpowiedź #5 dnia: Marzec 02, 2010, 08:42:32 am »
Zacznijmy od tego, że ten konkretny hook nie powinien zwracać nic poza 0 i 1, szczęśliwie się skłąda,ze BMD_OK to zero, zwrocenie czegokolwiek innego wyrzuci wiadomość do "/dev/null". Stałe BMD są używane w hooku BeforeMessageDisplay.

wsprintf(_f, L"%s/%d/%s", msg->contactData.netID, 1, WTW_PF_MESSAGE_SEND);

to powinno być:

wsprintf(_f, L"%s/%d/%s", msg->contactData.netID, msg->contactData.netSID, WTW_PF_MESSAGE_SEND);

i ustaw w msg:

(pMsg->msgFlags |= WTW_MESSAGE_FLAG_OUTGOING) &= ~WTW_MESSAGE_FLAG_INCOMING;

tylko wczesniej zrob kopię 'msg' i na niej operuj.

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #6 dnia: Marzec 02, 2010, 21:49:32 pm »
WTW_PTR BmdProcess(WTW_PARAM wP, WTW_PARAM wL, void*){
wtwMessageDef *msg = (wtwMessageDef *) wP;
if(!wcscmp(msg->msgMessage,L"test")){

wtwMessageDef *pMsg = new wtwMessageDef;
*pMsg=*msg;

(pMsg->msgFlags |= WTW_MESSAGE_FLAG_OUTGOING) &= ~WTW_MESSAGE_FLAG_INCOMING;

wchar_t _f[255] = {0};
wsprintf(_f, L"%s/%d/%s", msg->contactData.netID, msg->contactData.netSID, WTW_PF_MESSAGE_SEND);
wtw->fnCall(_f, (WTW_PARAM)&pMsg, 0);
MessageBoxW(0, _f, L"", MB_OK);
return BMD_FORCE_NO_STORE|BMD_FORCE_NO_DISP;
}
return BMD_OK;
}
Przerobiłem hook na WTW_EVENT_CHATWND_BEFORE_MSG_DISP. Dalej nie odpowiada.
Czyżby skopiowanie w ten sposób nie wystarczało(wiem, że kopiuję wskaźniki, ale póki co, nie mam potrzeby ich zmieniać)?
Może podejdę do tego inaczej, jak stworzyć nową wiadomość?
« Ostatnia zmiana: Marzec 03, 2010, 21:34:58 pm wysłana przez Siwy »
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline adrian_007

  • Master Developer
  • Starszyzna
  • *
    • WTW PLUGINS
Re: wysyłanie wiadomości
« Odpowiedź #7 dnia: Marzec 02, 2010, 22:05:56 pm »
po co kopiowac wskaznik? wez podmien flagi w tej wiadomosci co dostajesz, wyslij to co przyszlo i przywroc potem flagi do poprzedniego stanu. imo powinno zadzialac.

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #8 dnia: Marzec 03, 2010, 21:34:06 pm »
wreszcie działa.
WTW_PTR BmdProcess(WTW_PARAM wP, WTW_PARAM wL, void*){
wtwMessageDef *msg = (wtwMessageDef *) wP;
if(!wcscmp(msg->msgMessage,L"test")){

DWORD a=msg->msgFlags;
(msg->msgFlags |= WTW_MESSAGE_FLAG_OUTGOING) &= ~WTW_MESSAGE_FLAG_INCOMING;
wchar_t _f[255] = {0};
wsprintf(_f, L"%s/%d/%s", msg->contactData.netID, msg->contactData.netSID, WTW_PF_MESSAGE_SEND);
wtw->fnCall(_f, (WTW_PARAM)msg, 0);
msg->msgFlags=a;
return BMD_FORCE_NO_STORE|BMD_FORCE_NO_DISP;
}
return BMD_OK;
}
Wcześniej nie działało, bo podawałem funkcji adres wskaźnika.
Teraz pojawiają się nowe pytania:
Czy da się coś zrobić, żeby wiadomość zjedzona przez wtyczkę, nie włączała mrygania okienkiem?
Jak stworzyć czystą wiadomość?

Edit:
:]
« Ostatnia zmiana: Marzec 03, 2010, 23:39:17 pm wysłana przez Siwy »
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline adrian_007

  • Master Developer
  • Starszyzna
  • *
    • WTW PLUGINS
Re: wysyłanie wiadomości
« Odpowiedź #9 dnia: Marzec 03, 2010, 22:57:15 pm »
nie dosc, ze niepotrzebna dynamiczna alokacja to jeszcze zasobow nie zwalniasz... brzydko :P

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #10 dnia: Wrzesień 23, 2010, 21:04:43 pm »
Zmuszony jestem odkopać wątek.
Znowu zacząłem się bawić tym API i wracam do problemu wysyłania wiadomości, raz odebraną można bez problemu odesłać, ale co ze stworzeniem nowej wiadomości?
Jest może jakaś funkcja zwracająca nowy wtwMessageDef* ?
Czy mam samemu stworzyć?
Win 7 Pro x86/Kubuntu 10.04 x64 :P

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Re: wysyłanie wiadomości
« Odpowiedź #11 dnia: Wrzesień 23, 2010, 21:20:54 pm »
Samemu ;P

Offline Siwy

  • Junior Developer
  • Młodzież
  • *
Re: wysyłanie wiadomości
« Odpowiedź #12 dnia: Wrzesień 23, 2010, 22:19:53 pm »
łee, wszystkie pola muszę wypełnić, czy jakieś (np. msgTime) mogę pominąć jeśli chcę sobie tylko przesłać kawałek tekstu do wtyczki po drugiej stronie?
Win 7 Pro x86/Kubuntu 10.04 x64 :P