This repository was archived by the owner on Oct 6, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplug.h
2148 lines (1910 loc) · 117 KB
/
plug.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
nazwa="Plug Shared"
ver="0.6.18.x"
info="Podstawowy nagłówek."
*/
/**
\file
Deklaracje wymagane do komunikacji pomiędzy wtyczkami.
*/
// -----------------------------------------------------------------------------------------------
/**
\defgroup gr_shared Komunikacja pomiędzy wtyczkami.
Nagłówek powinien być dołączony do kodu wtyczki poprzez plug_export.h .
\{
*/
#ifndef PLUGSHAREDH
#define PLUGSHAREDH
#define KONNEKT_SDK_V 2 ///< wydanie SDK
#pragma pack(push, 1)
#define IMPARAM int
#define tIMP IMPARAM
// przyszłościowo...
namespace Konnekt {
};
using namespace Konnekt;
class cCtrl;
typedef unsigned int tIMid;
typedef unsigned int tCntId;
/** Struktura używana podczas przesyłania wiadomości.
Jest używana jako bazowa dla większych struktur...
*/
struct sIMessage_base {
unsigned short s_size; ///< Rozmiar struktury w bajtach (zazwyczaj ustawiane przez kontruktor)
unsigned int id; ///< Identyfikator wiadomości
unsigned int flag; ///< Flaga wiadomości (na razie powinno być zawsze równe 0)
int net; ///< Docelowa sieć. 0 - rdzeń lub UI
unsigned int type; ///< Docelowy typ wtyczek
unsigned int sender; ///< Identyfikator wtyczki wysyłającej
sIMessage_base(unsigned int _id, int _net, unsigned int _type)
:s_size(sizeof(sIMessage_base)),id(_id),net(_net),type(_type),sender(0),flag(0) {}
sIMessage_base()
:s_size(sizeof(sIMessage_base)),id(0),net(0),type(0),sender(0),flag(0) {}
sIMessage_base(unsigned int _id)
:s_size(sizeof(sIMessage_base)),id(_id),net(0),type(0),sender(0),flag(0) {}
sIMessage_base(sIMessage_base * base) {*this = *base;}
};
/** Struktura używana podczas przesyłania wiadomości.
Może być strukturą bazową dla większych struktur ...
p1 i p2 mogą być zastąpione dowolnymi typami, najlepiej o
rozmiarze po 4 bajty ...
*/
struct sIMessage_2params: public sIMessage_base {
IMPARAM p1; ///< Parametr pierwszy
IMPARAM p2; ///< Parametr drugi
sIMessage_2params(unsigned int _id, int _net, unsigned int _type, IMPARAM _p1, IMPARAM _p2)
:sIMessage_base(_id , _net, _type), p1(_p1),p2(_p2) {s_size=sizeof(sIMessage_2params);}
sIMessage_2params()
:sIMessage_base(), p1(0),p2(0) {s_size=sizeof(sIMessage_2params);}
sIMessage_2params(unsigned int _id, IMPARAM _p1, IMPARAM _p2)
:sIMessage_base(_id), p1(_p1),p2(_p2) {s_size=sizeof(sIMessage_2params);}
sIMessage_2params(sIMessage_base &base)
:sIMessage_base(base.id , base.net , base.type), p1(0),p2(0)
{s_size=sizeof(sIMessage_2params);
this->flag = base.flag;
this->sender = base.sender;}
};
typedef sIMessage_2params sIMessage;
typedef sIMessage sIMESSAGE;
#define sIMessage_V1 30 ///< Rozmiar tej struktury w wersji 1 SDK
typedef IMPARAM (__stdcall*fIMessageProc)(sIMessage_base * msg);
#ifndef _WINDOWS_
#define HANDLE void *
#define HINSTANCE void *
#define HWND void *
#endif
/** Identyfikatory tablic. */
/** Rodzaj zapisywanej informacji dla cCtrl::IMDEBUG() */
enum enDebugLevel {
DBG_NONE = 0,
DBG_NET = 1,
DBG_TRAFFIC = 2 ,
DBG_DUMP = 4 ,
DBG_FUNC = 8 ,
DBG_MISC = 0x10 ,
DBG_ERROR = 0x20 ,
DBG_WARN = 0x40 ,
DBG_ASSERT = 0x80 ,
DBG_LOG = 0x100 ,
DBG_DEBUG = 0x1000 ,
DBG_TEST = 0x10000 ,
DBG_TEST_FAILED = 0x30000 ,
DBG_TEST_PASSED = 0x50000 ,
DBG_TEST_TITLE = 0x70000 ,
DBG_COMMAND = 0x100000 ,
DBG_ALL = 0xFF0FFF
};
#include "core_exception.h"
typedef signed int tNet;
typedef char tTable;
// -----------------------------------------------------------------------------------------------
/** \defgroup net_ Sieci wtyczek
\brief \no
"Sieć" (Net) wtyczki oznacza przynależność do pewnej grupy.
Na przykład jeden protokół może być obsługiwany przez kilka niezależnych
od siebie wtyczek o tej samej wartości \a Net. <br> <br>
Wartość sieci używana jest przede wszystkim podczas komunikacji
pomiędzy wtyczkami. W momencie wysłania #IMessage , rdzeń
szuka wtyczki o podanej wartości \a Net obsługującej typ wysyłanej
wiadomości. W ten sposób , można rozsyłać w systemie wiadomości
do \i wtyczek nawet nie wiedząc o ich istnieniu (a przede wszystkim
o ich identyfikatorach) ...<br><br>
Numery sieci gotowych wtyczek będą dołączane do SDK...
\attention \a Net jest typu <b>unsigned int</b> , przy czym
wartości definiowane przez Was powinny być większe od @b 255!
Wartości od 128-255 powinny być WOLNE
\sa info imt_ #IM_PLUG_NET
\{
*/
#define NET_FIRST -2 ///< Wiadomość dotrze do pierwszej wtyczki (dowolnej sieci), która potrafi ją obsłużyć.
#define NET_BROADCAST -1 ///< Wiadomość dotrze do wtyczek wszystkich sieci.
#define NET_BC NET_BROADCAST ///< Odpowiednik #NET_BROADCAST.
#define NET_NONE 0 ///< Wiadomosci do rdzenia.
#define NET_NET 1 ///< Wtyczki obsługujące protokół "własny".
#define NET_INTERNAL 2
#define NET_SOUND 3 ///< Dźwięk
#define NET_UPDATE 4 ///< Update
#define NET_OTHER 6 ///< Wtyczki nie posiadające akcji, nie obsługujące wiadomości itp.
#define NET_GG 10 ///< Wtyczki obsługujące protokół GG
#define NET_ICQ 11 ///< Wtyczki obsługujące protokół ICQ
#define NET_JABBER 12 ///< Wtyczki obsługujące protokół JABBER
#define NET_EMAIL 13 ///< Wtyczki obsługujące EMaile
#define NET_SMS 14 ///< Wtyczki obsługujące SMSy
#define NET_KLAN 15
#define NET_KSTYLE 16
#define NET_EXPIMP 17
#define NET_KONNFERENCJA 20
#define NET_AIM 60 ///< Wtyczki obsługujące protokół AIM
#define NET_YAHOO 61 ///< Wtyczki obsługujące protokół YAHOO
#define NET_MSN 62 ///< Wtyczki obsługujące protokół MSN
#define NET_TLEN 63 ///< Wtyczki obsługujące protokół TLEN
// sieci tylko do 19 . ich komunikaty to IM_USER + NET * 1000
// następne od net 60, tak żeby komunikaty zaczęły się jako NET * 1000
#define NET_KTRANSFER 130 ///< kTransfer
// Inne wtyczki
#define NET_WAPILOT 756 ///< WApilot.dll
#define NET_KEASY 227
#define NET_KAWAY 666
/** \} */ // net_
// Typy IMessage
// -----------------------------------------------------------------------------------------------
/** \defgroup imt_ Definicje typów IMessage ...
\brief \no
Każda wtyczka powinna zdefiniować jakiego typu #IMessage potrafi
przyjąć (konkretniej - za co ma odpowiadać).<br><br>
Typy można łączyć poprzez '|' (OR). <br><br>
IMessage() wywołany z \a typem innym od #IMT_ALL zostanie
wysłany tylko do wtyczek z zadeklarowaną obsługą wybranego \a typu.
\sa #IM_PLUG_NET IMessage()
\{
*/
typedef unsigned int tIMtype;
/// Wszystkie typy.
#define IMT_ALL 0xFFFFFFFF
/// Wiadomość bezpośrednio do rdzenia (lub UI).
#define IMT_CORE 0
/// Wiadomości tekstowe.
#define IMT_MESSAGE 1
/// Protokół sieciowy.
#define IMT_PROTOCOL 2
/// Kontakty.
#define IMT_CONTACT 4
/// Konfiguracja.
#define IMT_CONFIG 8
/// Interfejs Użytkownika (używanie wtyczki UI).
#define IMT_UI 0x10
/** Wtyczka obsługuje kontakty całej swojej sieci.
\attention Ustawienie tego typu spowoduje dodanie nazwy sieci (#IM_PLUG_NETNAME)
do list sieci w opcjach kontaktu (np. dodawanie , ignorowanie itp.)<br>
Tylko \b jedna wtyczka z całej sieci może mieć ten typ ustawiony!!!
\sa #IM_PLUG_NETNAME \ref cnt
*/
#define IMT_NET 0x20 // Rozpoznaje kontakty danej sieci (podczas dodawania , edycji)
/** Wtyczka obsługuje wyszukiwanie kontaktów w swojej sieci.
\attention Podobnie jak w #IMT_UI Ustawienie tego typu spowoduje dodanie nazwy sieci (#IM_PLUG_NETNAME)
do list sieci w wyszukiwarce kontaktów<br>
Tylko \b jedna wtyczka z całej sieci może mieć ten typ ustawiony!!!
\sa #IM_PLUG_NETNAME \ref cnt
*/
#define IMT_NETSEARCH 0x40
/// Wtyczka wykorzystuje system obsługi wiadomości tekstowych zawarty w UI.
#define IMT_MSGUI 0x80
/// Kontakty w sieci posiadają UID (UserID)
#define IMT_NETUID 0x100
/// Otrzyma w IM_MSG_RCV wszystkie wiadomoťci , niezale¬nie od \ref net_ "NET".
#define IMT_ALLMESSAGES 0x200
/// Będzie otrzymywać IM_MSG_ACK.
#define IMT_MESSAGEACK 0x400
/** \} */ // imt_
// -----------------------------------------------------------------------------------------------
/** \defgroup gr_im Identyfikatory IMessage
\brief \no
Identyfikator jest \i nazwą przesyłanej #IMessage (wiadomości
wewnętrznej).
\par
Wiadomości dzielą się na (pod względem przeznaczenia):
- IMC_* \ref imc_ od 0 do 10000 #IMI_BASE
- IMI_* \ref imi_ od 10000 #IMI_BASE do 20000 #IM_BASE
- IM_* \ref im_ od 20000 #IM_BASE do 0xFFFFFFFF
\attention Wiadomości \ref imc_ dotrą \b tylko do \ref core "rdzenia". (niezależnie od wybranego \a net i \a type w IMessage())
\attention Wiadomości \ref imi_ dotrą \b tylko do \ref ui "UI". (niezależnie od wybranego \a net i \a type w IMessage())
\attention Wiadomości \ref im_ < #IM_SHARE mogą być wysyłane \b tylko przez \ref core "rdzeń" i \ref ui "ui".
\attention Wiadomości \ref im_ deklarowane przez użytkownika powinny być tworzone jako #IM_USER + numer (numer najlepiej jako NET * 1000).
\attention Parametry podawane są w kolejności - P1 , P2.
Wiadomości utworzone na potrzeby powstających wtyczek powinny
być umieszczane w nazwa_wtyczki_shared.h tak, aby inni mogli
wykorzystywać API wtyczki.
\sa IMessageProc()
\{
*/
#define IMI_BASE 10000 ///< Od tej granicy zaczynają się wiadomości do \ref ui "UI".
#define IM_BASE 20000 ///< Od tej granicy zaczynają się wiadomości do \ref plug "wtyczek" wysyłane tylko przez \ref core "rdzeń" i \ref ui "UI".
#define IM_SHARE 30000 ///< Od tej granicy zaczynają się wiadomości do \ref plug "wtyczek".
#define IM_USER 40000 ///< Od tej granicy zaczynają się wiadomości do \ref plug "wtyczek" zdefiniowane przez użytkownika.
// -----------------------------------------------------------------------------------------------
/**
\defgroup im_ do Wtyczek
\brief \no
\{
*/
// Inicjalizacja DLL'a
#define IM_PLUG_NET IM_SHARE+10 ///< Zwraca wartość NET wtyczki.
#define IM_PLUG_TYPE IM_SHARE+11 ///< Zwraca wartości IMT_ wtyczki.
#define IM_PLUG_VERSION IM_SHARE+12 ///< Zwraca opis wersji wtyczki.
#define IM_PLUG_SIG IM_SHARE+13 ///< Zwraca sygnaturę wtyczki.
#define IM_PLUG_CORE_V IM_SHARE+14 ///< Zwraca wymaganą sygnaturę rdzenia (lub 0).
#define IM_PLUG_UI_V IM_SHARE+15 ///< Zwraca wymaganą sygnaturę UI (lub 0).
#define IM_PLUG_NAME IM_SHARE+16 ///< Zwraca nazwę wtyczki.
#define IM_PLUG_NETNAME IM_SHARE+17 ///< Zwraca nazwę sieci obsługiwanej przez wtyczkę (wyświetlaną w oknach dialogowych) (lub 0).
#define IM_PLUG_NETSHORTNAME IM_SHARE+25 ///< Zwraca skróconą nazwę sieci (jak "ICQ", "GG", "JABBER"), aby umożliwić użytkownikowi operowanie krótkimi nazwami sieci (np. przy tekstowym opisywaniu UIDów w parametrach) (lub 0).
#define IM_PLUG_UIDNAME IM_SHARE+26 ///< Zwraca nazwę UIDu typową dla obsługiwanej sieci, do wyświetlania w oknach dialogowych (np "JID", "UIN" itd...) (lub 0)
#define IM_PLUG_CERT IM_BASE+18 ///< Zastrzeżone dla wtyczek specjalnych.
#define IM_PLUG_INFO IM_BASE+19 ///< Wtyczka może zalogować informację o swoim "stanie".
#define IM_PLUG_SDKVERSION IM_BASE+20 ///< Zwraca #KONNEKT_SDK_V.
#define IM_PLUG_PRIORITY IM_BASE+21 ///<Wtyczka podaje swój priorytet w kolejkach (im wyższy, tym znajdzie się wcześniej).
/// Wszystkie "zwykłe" wtyczki mogą nie obsługiwać tej wiadomości, lub po prostu zwracać 0 (ich priorytet zostanie ustawiony na PLUGP_STANDARD.
/// Dwie wtyczki o tym samym priorytecie ustawiane są w kolejności użytkownika.
/// Jeżeli twoja wtyczka nie jest uzależniona od kolejności, NIE ustawiaj jej!
/// Dzięki priorytetom wiadomości mogą być obsługiwane w odpowiedniej kolejności.
/// \return (PLUGP_enum) pozycja
/** Grupy priorytetów dla #IM_PLUG_PRIORITY */
enum PLUGP_enum {
PLUGP_LOWEST = 0x10, /// Koniec listy
PLUGP_LOW = 0x40,
PLUGP_STANDARD = 0x80, /// Zwykłe wtyczki
PLUGP_HIGH = 0xB0,
PLUGP_HIGHEST = 0xE0, /// Początek listy
PLUGP_NONE = 0x0 /// W efekcie to samo co PLUGP_STANDARD
};
#define IM_PLUG_INIT IM_BASE+1
/**< Inicjalizacja wtyczki. Pierwszy przesłany IMessage nakazujący wtyczce inicjalizację kodu.
\param cCtrl adres struktury sterującej
\param ID identyfikator wtyczki
*/
#define IM_PLUG_DEINIT IM_BASE+2 ///< Za chwilę uchwyt do wtyczki zostanie zwolniony. Najlepszy moment żeby posprzątać.
#define IM_PLUG_INITEX IM_BASE+3 ///< Zastrzeżone dla wtyczek specjalnych.
#define IM_PLUG_ARGS IM_BASE+24 /**< Podaje wtyczkom argumenty przesłane do programu.
Wysyłane jest zaraz po uruchomieniu, oraz gdy zostanie uruchomiona kolejna instancja programu na tym samym profilu. W drugim przypadku podawane są argumenty przekazane do drugiej instancji...
Argumenty mają tą samą strukturę co __argc i __argv.
Komunikat przesyłany jest przy pomocy @b sIMessage_plugArgs .*/
/** Struktura używana w #IM_PLUG_ARGS.*/
struct sIMessage_plugArgs: public sIMessage_base {
unsigned int argc; ///< Ilość argumentów w argv
const char * const * argv; ///< Tablica wskaźników do argumentów
sIMessage_plugArgs(unsigned int argc , const char * const * argv)
:sIMessage_base(IM_PLUG_ARGS , NET_BC, IMT_ALL), argc(argc),argv(argv)
{
s_size=sizeof(*this);
}
const char * getArg(unsigned int i, const char * def = "") {
return (i < this->argc) ? this->argv[i] : def;
}
bool argEq(unsigned int i, const char * cmp);
};
/** Przekazuje komendę wpisaną w oknie @Dev. Komunikat przesyłany jest przy pomocy @b sIMessage_debugCommand.
@return 0
*/
#define IM_DEBUG_COMMAND IM_BASE+25
/** Jeżeli podczas odłączania wtyczki z jakiegoś względu nie powinno być wywoływane FreeLibrary trzeba obsłużyć ten komunikat i zwrócić 1. */
#define IM_PLUG_DONTFREELIBRARY IM_BASE+26
/** Wszystkie wtyczki zostały zainicjalizowane...
*/
#define IM_ALLPLUGINSINITIALIZED IM_BASE + 22
/** Za chwilę wtyczka o podanym ID zostanie odłączona.
@param p1 (int) ID wtyczki
*/
#define IM_PLUG_PLUGOUT IM_BASE + 23
/** Ta wersja wtyczki uruchamiana jest w tym profilu po raz pierwszy.
@param p1 (int) Poprzednia wersja, lub 0.
Format wersji to w hexie: MNNRRBBB - Major, miNor, Release, Build.
W plug_func.h można znaleźć makra do szybkiego wyciągania tych wartości.
*/
#define IM_PLUG_UPDATE IM_BASE+30
#define IM_GET_STATUS IM_SHARE+31 ///< Jeżeli wtyczka obsługuje sieć, powinna zwrócić swój aktualny status.
/// \return (int) status
#define IM_GET_STATUSINFO IM_SHARE+32 ///< Jeżeli wtyczka obsługuje sieć, powinna zwrócić swój aktualny opis statusu.
/// \return (const char *) opis statusu
#define IM_GET_UID IM_SHARE+33 /**< Jeżeli wtyczka obsługuje sieć, powinna zwrócić UID użytkownika programu w swojej sieci
@return (const char *) UID użytkownika
*/
#define IM_NEW_PROFILE IM_BASE + 40 ///< Oznacza pierwsze uruchomienie danego profilu. Najlepszy moment żeby się przywitać.
#define IM_CANTQUIT IM_BASE + 41 ///< Zwrócenie \i true spowoduje anulowanie zamykania programu.
#define IM_PASSWORDCHANGED IM_BASE + 42 ///< Oznacza zmianę hasła dla profilu.
#define IM_THREADSTART IM_BASE + 43 ///< Aktualny wątek właśnie został uruchomiony. Lepiej polegać jednak na DllMain!
#define IM_THREADEND IM_BASE + 44 ///< Aktualny wątek właśnie się kończy. Lepiej polegać jednak na DllMain!
#define IM_MSG_RCV IM_BASE+100
/**< Wtyczka powinna sprawdzić czy obsługuje dany typ wiadomości.
Wtyczki odpytywane są "od końca". Ostatnia, która zwróci
IM_MSG_RCV_ok będzie otrzymywać również IM_MSG_OPEN.
\param p1 (cMessage *) wiadomość.
\param p2 (bool) \i true - wiadomość właśnie przyszła , \i false - wiadomość została załadowana z pliku.
\return (int) Połączone flagi \ref im_msg_, lub 0 jeśli nie obsługuje takich wiadomości.
*/
#define IM_MSG_SEND IM_SHARE+100 /**< Wiadomość powinna zostać wysłana.
\param p1 (cMessage *) Wiadomość
\return Jeśli się udało powinno zrócić \ref im_msg_.
*/
#define IM_MSG_OPEN IM_SHARE+101 /**< Wiadomość powinna zostać otwarta.
\param p1 (cMessage *) Wiadomość
\return Jeśli się udało powinno zrócić \ref im_msg_.
*/
#define IM_MSG_ACK IM_BASE+102 /**< Potwierdzenie wysłania wiadomości.
\param p1 (cMessageAck *) Potwierdzenie. ID jest ustawiony na ID potwierdzanej wiadomości (która jeszcze siedzi w kolejce i można ją odczytać).
*/
/** @defgroup im_msg_ Zwroty z IM_MSG_*
#IM_MSG_RCV , #IM_MSG_SEND i #IM_MSG_OPEN mogą zwrócić połączone
takie flagi.
@{
*/
#define IM_MSG_ok 1 ///< Flaga zwrotna #IM_MSG_RCV - Musi być ustawiona jesli wtyczka zamierza obsłużyć wiadomość.
#define IM_MSG_delete 2 ///< Wiadomość powinna zostać niezwłocznie usunięta...
#define IM_MSG_update 4 ///< Zawartość wiadomości została zmieniona i powinna zostać zaktualizowana jej kopia w kolejce.
#define IM_MSG_processing 8 ///< Flaga zwrotna #IM_MSG_OPEN i #IM_MSG_SEND - Wiadomość jest dalej przetwarzana (np w osobnym wątku) i zostanie usunięta z kolejki poprzez #IMC_MESSAGEREMOVE,
/// lub zakończy przetwarzanie poprzez #IMC_MESSAGEPROCESSED.
/** @} */
#define IM_MSG_CHARLIMIT IM_BASE+105 ///< Zapytanie o limit znaków na wiadomość
/// \return Limit ilości znaków na wiadomość. 0 - bez limitu
// Config (IMT_CONFIG)
#define IM_SETCOLS IM_BASE+1001 ///< W tym momencie wtyczka powinna zadeklarować wszystkie kolumny w tablicach.
#define IM_CFG_SAVE IM_BASE+1010 ///< Ustawienia zaraz zostaną zapisane do pliku.
#define IM_CFG_LOAD IM_BASE+1011 ///< Ustawienia zostały wczytane.
#define IM_CFG_CHANGED IM_BASE+1020 ///< Ustawienia zostaly zmienione przez użytkownika.
// UI
#define IM_UI_PREPARE IM_BASE+2000 ///< Najlepszy moment aby przygotować interfejs (np zdefiniować Akcje).
#define IM_START IM_BASE+2100 ///< Wtyczka powinna wystartować.
#define IM_END IM_BASE+2101 ///< Wtyczka powinna zakończyć działanie.
/// @param p1 (bool) I powinna to zrobić jak najszybciej...
#define IM_BEFOREEND IM_BASE+2102 ///< Za chwilę zostanie rozesłane IM_END, ostatnia chwila, kiedy cCtrl::IsRunning() zwraca true.
/// @param p1 (bool) Zamykanie jest w trybie "natychmiastowym". Należy wykonywać jak najmniej operacji...
#define IM_UIACTION IM_BASE+2200 ///< Powiadomienie o zdarzeniu w akcji.
/// \param p1 (cUIActionNotify *) Powiadomienie.
// IMT_PROTOCOL
#define IM_CONNECT IM_SHARE+3000 /**< Można zacząć się łączyć.
@param p1 (int) Liczba ponowionych prób połączenia
*/
#define IM_DISCONNECT IM_SHARE+3001 ///< Trzeba się rozłączyć.
#define IM_AWAY IM_SHARE+3002 ///< Program wchodzi w tryb Auto-Away.
#define IM_BACK IM_SHARE+3003 ///< Program powraca z trybu Auto-Away.
#define IM_NEEDCONNECTION IM_BASE+3004 ///< Wysyłana do kontrolek zaraz po włączeniu
/// automatycznych połączeń i na chwilę przed
/// wykonaniem pierwszego testu na istnienie połączenia.
/// \attention W tej wiadomości #IMC_SETCONNECT
/// powinny wywoływac wtyczki które ZAWSZE potrzebują połączeń
/// (niezależnie od ustawienia #CFG_AUTOCONNECT).<br>
/// Pozostałe powinny zgłosić #IMC_SETCONNECT np. w #IM_PREPARE.
#define IM_CHANGESTATUS IM_SHARE+3005 ///< Jeżeli wtyczka obsługuje sieć, powinna zmienić swój status...
/// \param p1 (int) status (lub -1 jeśli nie zmieniamy)
/// \param p2 (char*) opis (lub 0 jeśli nie zmieniamy)
#define IM_ISCONNECTED IM_SHARE+3006 ///< Trzeba zwrócić 1 jeśli jesteśmy połączeni.
#define IM_PING IM_SHARE+3007 ///< Wtyczka zamawiała PING'a (na razie nie obsługiwane...)
#define IM_CNT_UPLOAD IM_SHARE+4000 /**< Informacje o kontakcie @a p1 zostały zmienione i moga być np. zapisane na serwerze.
@param p1 (int) ID kontaktu do wysłania
@param p2 (bool) 0 - info powinno być wczytywane bezpośrednio z tabeli.
1 - info powinno być wczytywane jako wartości odpowiednich akcji w oknie z informacjami o kontakcie (używając UIActionCfgGetValue())
*/
#define IM_CNT_DOWNLOAD IM_SHARE+4001 /**< Informacje o kontakcie \a p1 powinny zostać zaktualizowane (np. pobrane z serwera).
@param p1 (int) ID kontaktu do pobrania
@param p2 (bool) 0 - info powinno zostać zapisane bezpośrednio w tabeli.
1 - info powinno być ustawione jako wartości odpowiednich akcji w oknie z informacjami o kontakcie (używając UIActionCfgSetValue())
*/
/** Kontakt zaraz zostanie usunięty.
\param p1 (int) ID kontaktu
\param p2 (bool) true - usunięcie zostało potwierdzone przez uzytkownika.*/
#define IM_CNT_REMOVE IM_BASE+4002
/** Kontakt został usuniety.
\param p1 (int) ID kontaktu
\param p2 (bool) true - usunięcie zostało potwierdzone przez uzytkownika.*/
#define IM_CNT_REMOVED IM_BASE+4005
#define IM_CNT_ADD IM_BASE+4003 ///< Kontakt został dodany
/// \param p1 (int) ID kontaktu
#define IM_CNT_ADDING IM_BASE+4004 ///< Kontakt jest w trakcie tworzenia (które może zostać ew. przerwane)
/// Parametry kontaktu nie są jeszcze ustalone.
/// \param p1 (int) ID kontaktu
/** Żądanie szukania kontaktu (np. w katalogu sieci)
\param p1 (sCNTSEARCH *) parametry wyszukiwania
*/
#define IM_CNT_SEARCH IM_BASE+4010
/** Któraś z cech kontaktu (np. UID) została zmieniona. Przesyłane przy pomocy sIMessage_CntChanged. Jeżeli przecastujesz to na sIMessage_2params to \a p1 jest ID kontaktu.
*/
#define IM_CNT_CHANGED IM_BASE+4006
/** Struktura do przesyłania #IM_CNT_CHANGED.*/
struct sIMessage_CntChanged:public sIMessage_base {
unsigned int _cntID; ///< ID kontaktu
union {
///< Oznacza co zostało zmienione.
struct {
unsigned net : 1;
unsigned uid : 1;
unsigned group : 1;
} _changed;
unsigned int _changed_bitmap;
};
unsigned int _oldNet; ///< Poprzednia wartość net tego kontaktu
const char * _oldUID; ///< Poprzednia wartość UID
sIMessage_CntChanged(int msgID , int cntID):sIMessage_base(msgID),_cntID(cntID),_changed_bitmap(0),_oldNet(NET_NONE),_oldUID(0){s_size=sizeof(*this);}
sIMessage_CntChanged(const sIMessage_base * base){
if (base->s_size == sizeof(*this)) {
*this = *(const sIMessage_CntChanged*)(base);
} else if (base->s_size >= sizeof(sIMessage_2params)) {
this->flag = base->flag;
this->id = base->id;
this->net = base->net;
this->sender = base->sender;
this->type = base->type;
this->s_size = sizeof(*this);
this->_cntID = ((const sIMessage_2params*)(base))->p1;
this->_changed_bitmap = ((const sIMessage_2params*)(base))->p2;
this->_oldNet = NET_NONE;
this->_oldUID = 0;
} else throw 0;
}
};
#define IM_CNT_STATUSCHANGE IM_BASE+4011 ///< Status kontaktu zaraz ulegnie zmianie.
/// sIMessage_StatusChange *
#define IM_CNT_COMPOSING IM_SHARE+4030 /**< Użytkownik pisze wiadomość do wskazanego kontaktu.
Wysłane do interfejsu spowoduje rozesłanie #IM_CNT_COMPOSING do wszystkich wtyczek
i jeżeli w przeciągu kilkunastu sekund nie zostanie wysłane ponownie roześle
#IM_CNT_COMPOSING_STOP.
@param p1 (int) ID kontaktu
*/
#define IM_CNT_COMPOSING_STOP IM_SHARE+4031 /**< Użytkownik przestał pisać do wskazanego kontaktu.
Wysłane do interfejsu spowoduje rozesłanie do wtyczek #IM_CNT_COMPOSING_STOP jeżeli
w przeciągu ostatnich kilkunastu sekund wystąpiło zdarzenie #IM_CNT_COMPOSING z tym samym kontaktem.
@param p1 (int) ID kontaktu
*/
#define IM_STATUSCHANGE IM_BASE+4012 ///< Status wtyczki zaraz ulegnie zmianie.
/// sIMessage_StatusChange *
/** Struktura do przesyłania #IM_CNT_STATUSCHANGE i #IM_STATUSCHANGE.*/
struct sIMessage_StatusChange:public sIMessage_base {
union {
unsigned int cntID; ///< ID kontaktu
unsigned int plugID; ///< ID wtyczki zmieniającej status.
};
unsigned int status; ///< Nowy status, który zaraz zostanie ustawiony. -1 oznacza brak zmiany.
const char * info; ///< Nowy opis statusu, który zaraz zostanie ustawiony. 0 oznacza brak zmiany.
sIMessage_StatusChange(int msgID , int cntID , unsigned int status, const char * info):sIMessage_base(msgID),cntID(cntID),status(status),info(info){s_size=sizeof(*this);}
sIMessage_StatusChange(const sIMessage_base * base) {
if (base->s_size < sizeof(*this)) throw cKException_Msg(0 , base);
*this = *(sIMessage_StatusChange*)base;
s_size=sizeof(*this);
}
};
#define IM_GRP_CHANGED IM_BASE+4020 ///< Lista grup uległa zmianie.
#define IM_IGN_CHANGED IM_BASE+4021 ///< Lista ignorowanych kontaktów uległa zmianie.
/// \param p1 (int) sieć >0 - kontakt został dodany, <0 - usunięty
/// \param p2 (char*)
/** Parametry wyszukiwania/wyniki wyszukiwania.
Struktura wykorzystywana zarówno podczas wysyłania zapytania, jak i zwracania wyników.
*/
struct sCNTSEARCH {
unsigned short s_size; ///< Musi zawierać rozmiar struktury. Ustawiany przez kontruktor.
int status; ///< Podczas szukania - 1 - szukaj tylko online. Podczas zwracania - status kontaktu.
char uid [256] /// UID
,name [101] /// Imię
,surname [101] /// Nazwisko
,nick [101] /// Ksywa
,city [51] /// Miasto
,email [101]/// Email
,phone [51] /// Telefon
,other [256] /// Inne (tylko w odpowiedzi)
;
int gender; ///< Płeć 0 - nieznana , 1 - kobieta , 2 - mężczyzna
int born_min; ///< Urodzony, OD roku
int born_max; ///< Urodzony, DO roku
int net; ///< Numer sieci.
int start; ///< Od jakiej pozycji pokazywać dalej.
/// Przy zwracaniu, ostatni znaleziony kontakt powinien mieć ustawiony \start
/// na pozycję od której można wznowić wyszukiwanie.
HANDLE handle; ///< Uchwyt do okna wyszukiwania
sCNTSEARCH() {s_size=sizeof(sCNTSEARCH);start=0;handle=0;net=0;gender=0;born_min=born_max=0;
uid[0]=0;
name[0]=0;
surname[0]=0;
nick[0]=0;
city[0]=0;
email[0]=0;
phone[0]=0;
other[0]=0;
}
};
#define sCNTSEARCH_V1 496
/** \} */ // Wiadomości do WTYCZEK
// -----------------------------------------------------------------------------------------------
/**
\defgroup imc_ do Rdzenia
\brief \no
\{
*/
#define IMC_LOG 1 ///< Jeżeli program jest debugowany , zapisuje tekst w konnekt.log . Wiadomość nie jest rozpoznawana przez Core (wiec ustawi blad!)
/// \param p1 (char*) tekst.
#define IMC_GETPROFILE 2 ///< Zwraca nazwę profilu.
/// \return (char *)
#define IMC_DEBUG 3 ///< Otwiera okno developera
#define IMC_ISDEBUG 4 ///< Zwraca true gdy jest w trybie developera.
#define IMC_ISBETA 9 ///< Zwraca true gdy jest w trybie beta.
#define IMC_BETA 40 ///< Otwiera okno beta-testera
#define IMC_REPORT 41 ///< Otwiera okno raportowania
#define IMC_PLUGS 42 ///< Otwiera okno wtyczek
#define IMC_NET_TYPE 43 ///< Pobiera łączną wartość flag typów (#IM_PLUG_TYPE) ze wszystkich wtyczek danej sieci.
/// \param p1 (int) sieć
#define IMC_SESSION_ID 44 /**< Zwraca identyfikator sesji profilu Konnekta.
Przy jego pomocy można odróżnić dwie instancje korzystające z różnych profili...
@return (const char*) identyfikator sesji (MD5 ścieżki katalogu profilu)
*/
#define IMC_GET_HINTERNET 45 /**< Zwraca globalny uchwyt sesji WinInet otwartej przez InternetOpen (z ustawionym Proxy wg. konfiguracji).
@return (HINTERNET) uchwyt, NIE można go zamykać!*/
#define IMC_HINTERNET_OPEN 46 /**< Tworzy i zwraca uchwyt sesji WinInet otwartej przez InternetOpen (z ustawionym Proxy wg. konfiguracji).
@param p1 (const char*) UserAgent
@return (HINTERNET) uchwyt, trzeba go zamykać!*/
#define IMC_GET_MAINTHREAD 47 /**< Zwraca uchwyt do głównego wątku.
@return (HANDLE)
*/
#define IMC_DEBUG_COMMAND 48
struct sIMessage_debugCommand: public sIMessage_plugArgs {
enum enAsync {
synchronous = 0,
duringAsynchronous = 1,
asynchronous = 2,
} async;
sIMessage_debugCommand(unsigned int argc, const char * const * argv, enAsync async = synchronous)
:sIMessage_plugArgs(argc, argv), async(async) {
id = IMC_DEBUG_COMMAND;
net = 0;
type = 0;
s_size=sizeof(*this);
}
};
#define IMC_ARGC 5 ///< Zwraca liczbę parametrów przekazanych do programu.
#define IMC_ARGV 6 /// Zwraca parametr \a p1.
/// \param p1 (int) numer parametru
/// \return (char*)
#define IMC_ISWINXP 60 ///< Zwraca 1, jeśli korzystamy z ComCtl6 na winXP.
#define IMC_ISNEWPROFILE 61 ///< Zwraca 1, gdy jest to pierwsze uruchomienie na tym profilu.
#define IMC_ISNEWVERSION 62 ///< Zwraca 1, gdy jest to pierwsze uruchomienie na nowej wersji.
/// \warning Wynik jest mało miarodajny i może być fałszywy! Wiarygodne wyniki
/// zostaną przesłane w IM_PLUG_UPDATE
#define IMC_CONNECTED 7 ///< Zwraca true, jeśli jesteśmy podłączeni do internetu.
#define IMC_VERSION 8 ///< Zwraca wersję rdzenia.
/// \param p1 (char *) Wskaźnik do ciągu znaków do zapisania wersji tekstowo, lub NULL.
/// \return (int) #VERSION_TO_NUM
#define IMC_SHUTDOWN 10 ///< Zamyka program.
/// @param p1 (bool) Czy zamknąć go natychmiastowo?
#define IMC_DISCONNECT 11 ///< Rozłącza wszystkie wtyczki z sieci.
#define IMC_RESTART 17 ///< Restartuje program.
#define IMC_PROFILESDIR 23 ///< Ścieżka do katalogu z profilami.
/// \return (const char *)
#define IMC_PROFILEDIR 12 ///< Ścieżka do katalogu z profilem.
/// \return (const char *)
#define IMC_RESTORECURDIR 24 ///< Przywrca aktywną ścieżkę na katalog programu i ją zwraca.
/// @return (const char *) katalog z programem
#define IMC_KONNEKTDIR IMC_RESTORECURDIR ///< Przywraca aktywną ścieżkę na katalog programu i ją zwraca.
#define IMC_GETBETALOGIN 25
#define IMC_GETBETAPASSMD5 27
#define IMC_GETBETAANONYMOUS 31
/** Zwraca "numer seryjny" instalacji Konnekta, losowa liczba używana najczęściej do rozróżniania kopii programu w statystykach */
#define IMC_GETSERIALNUMBER 33
#define IMC_LOGDIR 29 ///< Zwraca ścieżkę do katalogu z log'ami.
/// @return (char*) ścieżka zakończona '\\'
#define IMC_TEMPDIR 32 ///< Zwraca ścieżkę do katalogu tymczasowego.
/// @return (char*) ścieżka zakończona '\\'
#define IMC_PROFILECHANGE 13 ///< Zmienia/tworzy profil.
/// \param p1 (char*) nazwa
/// \param p2 (bool) true jeśli profil ma być utworzony
/// \return true jeśli się udało
#define IMC_PROFILEREMOVE 14 ///< Usuwa aktualnie używany profil.
#define IMC_PROFILEPASS 15 ///< Otwiera okno do ustawiania hasła.
#define IMC_GETMD5DIGEST 16 ///< Zwraca hasło profilu jako MD5Digest.
/// \param p1 (unsigned char [16]) bufor do zapisania.
#define IMC_SAVE_CFG 20 ///< Zapisuje ustawienia na dysk.
#define IMC_SAVE_CNT 21 ///< Zapisuje kontakty na dysk.
#define IMC_SAVE_MSG 22 ///< Zapisuje kolejkę wiadomości na dysk.
#define IMC_CFG_CHANGED 28
#define IMC_SETCONNECT 30 ///< Ustawia wtyczkę na liście "rządanych połączeń".
/// W chwili wykrycia połączenia z internetem,
/// lub gdy jest połączenie po kilkudziesięciu sekundach
/// zostanie wysłany do wtyczki komunikat #IM_CONNECT.
/// \param p1 (bool) stan - 1 łącz , 0 - przestań próbować
#define IMC_THREADSTART 50 // Wiadomość wykorzystywana TYLKO przez UI
#define IMC_THREADEND 51 // Wiadomość wykorzystywana TYLKO przez UI
#define IMC_NEWMESSAGE 100 ///< Dodaje wiadomość do kolejki.
/// \attention Zawartość struktury może ulec zmianie! Jeżeli tworzymy bufory tekstowe, zwalniać trzeba je przez
/// lokalne kopie adresów, a nie wskaźniki w strukturze!!!
/// \param p1 (cMessage*) wiadomość.
/// \return (int) id wiadomosci
// #define NMF_SEND 1 // Flagi wiadomosci
#define IMC_MESSAGEQUEUE 101 ///< Sprawdza kolejkę wiadomości.
/// Próbuje przyjąć/rozesłać oczekujące wiadomości.
/// \param p1 (sMESSAGESELECT*) które wiadomości maja zostać sprawdzone.
#define IMC_MESSAGENOTIFY 102 ///< Szuka powiadomienia o nowej wiadomości dla danego UIDa w kolejce wiadomości.
/// \param p1 (sMESSAGENOTIFY*) struktura podająca czego szukać i przyjmująca wynik.
#define IMC_MESSAGEWAITING 103 ///< Podaje ile wiadomości oczekuje w kolejce
/// \param p1 (sMESSAGESELECT*) które wiadomości mają zostać uwzględnione
/// \return (int) liczba wiadomości spełniających kryteria
#define IMC_MESSAGEREMOVE 104 ///< Usuwa wiadomości z kolejki.
/// \param p1 (sMESSAGESELECT*) Rodzaj wiadomości do usunięcia
/// \param p2 (int) Ile maxymalnie usunąć
/// \return false gdy się nie powiedzie
#define IMC_MESSAGEGET 106 ///< Pobiera pierwszą wiadomość która spełnia kryteria.
/// \param p1 (sMESSAGESELECT*) Rodzaj wiadomości do pobrania.
/// \param p2 (cMessage*) Struktura do której zostanie zapisana wiadomość.
/// \retrun 1 - jeśli się powiodło
#define IMC_MESSAGEACK 107 ///< Potwierdzenie wysłania wiadomości.
/// W cMessageAck::id \b musimy podać ID potwierdzanej wiadomości.
/// Ustawienie msg i ext jest opcjonalne.
/// \param p1 (cMessageAck*) Struktura z potwierdzeniem.
#define IMC_MESSAGEPROCESSED 108 ///< Zakończenie przetwarzania.
/// Po skończeniu przetwarzania wiadomości, na którą odpowiedzieliśmy flagą IM_MSG_processing
/// wysyłamy ten komunikat, by rdzeń "odznaczył" naszą wiadomość.
/// #IMC_MESSAGEPROCESSED wysyła się tylko, gdy wiadomość nie została od razu usunięta.
/// \param p1 (int) ID wiadomości.
/// \param p2 (bool) true - wiadomość może zostać usunięta
/** Struktura służąca do wybierania wiadomości.
\sa #IMC_MESSAGEREMOVE #IMC_MESSAGEWAITING #IMC_MESSAGEGET #IMC_MESSAGEQUEUE*/
typedef struct sMESSAGESELECT {
unsigned short s_size;
int net; ///< Sieć kontaktu. Ustaw na #NET_BC aby użyć wszystkich sieci.
const char * uid; ///< UID kontaktu. Ustaw 0 aby użyć wszystkich.
int type; ///< Typ wiadomości. Ustaw na -1 żeby użyć wszystkich.
unsigned int wflag; ///< Tylko wiadomości posiadające te flagi. 0 żeby użyć wszystkich.
unsigned int woflag; ///< Tylko wiadomości nie posiadające tych flag. 0 żeby użyć wszystkich.
int id; ///< ID wiadomości, -1 żeby użyć wszystkich.
unsigned int position; ///< Które z kolei przyjąć dopasowanie?
sMESSAGESELECT() {s_size=sizeof(sMESSAGESELECT);net=NET_BC;uid=0;type=-1;wflag=0;woflag=0;id=-1;position=0;}
sMESSAGESELECT(int _net , const char * _uid=0 , unsigned int _type = -1 , unsigned int _wflag=0 , unsigned int _woflag=0) {
s_size=sizeof(sMESSAGESELECT);
net=_net;
uid=_uid;
type=_type;
wflag=_wflag;
woflag=_woflag;
id=-1;
position = 0;
}
} sMESSAGEPOP , sMESSAGEWAITING;
#define sMESSAGEWAITING_V1 22
/** Zwraca ID kontaktu.
Jeżeli @a net będzie ustawiony na NET_NONE w UID można przekazać (tekstem) ID kontaktu. Jeżeli kontakt o danym ID istnieje, ID zostanie zwrócone. Funkcjonalność ta może służyć głównie do "przemycania" bezpośrednich identyfikatorów kontaktów do f-cji które przyjmują tylko wartości net i uid.
@param p1 (int) net
@param p2 (char*) UID
@return (int) ID
*/
#define IMC_FINDCONTACT 200
#define IMC_PLUG_COUNT 240 ///< Zwraca liczbę wtyczek.
#define IMC_PLUG_HANDLE 241 ///< Zwraca windowsowy uchwyt do wtyczki.
/// \param p1 (int) pozycja na liście wtyczek.
/// \return (int) HINSTANCE
#define IMC_PLUG_ID 243 ///< Zwraca ID wtyczki.
/// \param p1 (int) pozycja na liście wtyczek.
/// \return (int) ID
#define IMC_PLUG_FILE 242 ///< Zwraca ścieżkę do pliku dll wtyczki.
/// \param p1 (int) pozycja na liście wtyczek.
/// \return (char*) ścieżka
#define IMC_PLUGID_HANDLE 244 ///< Zwraca windowsowy uchwyt do wtyczki.
/// \param p1 (int) ID wtyczki.
/// \return (HINSTANCE) uchwyt
#define IMC_PLUGID_POS 245 ///< Zwraca pozycję wtyczki.
/// \param p1 (int) ID wtyczki.
/// \return (int) pozycja
#define IMC_FINDPLUG 247 ///< Zwraca ID wtyczki.
/// \param p1 (int) NET wtyczki.
/// \param p2 (int) Szukane flagi IMT_.
/// \return (int) ID
#define IMC_FINDPLUG_BYSIG 248 ///< Zwraca ID wtyczki.
/// \param p1 (char*) SIG.
/// \return (int) ID
#define IMC_FINDPLUG_BYNAME 249 ///< Zwraca ID wtyczki.
/// \param p1 (char*) name.
/// \return (int) ID
#define IMC_PLUG_VERSION 26 ///< Zwraca wersję wtyczki.
/// \param p1 (int) Pozycja wtyczki na liście, lub -1 aby sprawdzić wersję rdzenia.
/// \param p2 (char *) Wskaźnik do ciągu znaków do zapisania wersji tekstowo, lub NULL.
/// \return (int) #VERSION_TO_NUM
/** Odłącza wtyczkę o podanym identyfikatorze podając opowiednie uzasadnienie.
*/
struct sIMessage_plugOut:public sIMessage_base {
const static int __msgID = 250;
int _plugID;
const char * _reason;
enum enRestart {
erNo = 0 , erAsk = 1 , erYes = 2 , erAskShut = 3 , erShut = 4
} _restart; ///< Czy restartować program?
enum enUnload{
euNow=1 /// Nie powinno być ustawiane później niż w #IMI_ALLPLUGSINITIALIZED
, euNextStart=2
, euNowAndOnNextStart=3
} _unload; ///< Kiedy ją odłączyć?
sIMessage_plugOut(int plugID , const char * reason , enRestart restart = erAsk , enUnload unload = euNextStart):sIMessage_base(__msgID)
,_plugID(plugID),_reason(reason),_restart(restart),_unload(unload){s_size=sizeof(*this);}
};
#define IMC_STATUSCHANGE 246 ///< Informuje rdzeń, że za chwilę nastąpi zmiana statusu wtyczki.
/// Rdzeń rozsyła IM_STATUSCHANGE.
/// \warning Ten komunikat trzeba wysłać PRZED zmianą statusu, nie trzeba podawać
/// \a plugID. Jako \a status i \a info trzeba podać dane, które zaraz zostaną ustawione.
/// sIMessage_StatusChange
#define IMC_CNT_IGNORED 310 ///< Sprawdza czy kontakt jest ignorowany.
/// \param p1 (int) net
/// \param p2 (char*) UID
/// \return true jeśli jest.
#define IMC_CNT_FIND IMC_FINDCONTACT ///< \no
/**Sprawdza czy kontakt o podanym ID istnieje.
@param p1 (int) ID.*/
#define IMC_CNT_IDEXISTS 233
/** Dodaje kontakt.
Po ustawieniu parametrów kontaktu, lub od razu po #IMC_CNT_ADD trzeba wysłać #IMC_CNT_CHANGED
@param p1 (int) sieć
@param p2 (int) UID
@return (int) ID nowego kontaktu
*/
#define IMC_CNT_ADD 230
/**Usuwa kontakt
@param p1 (int) ID
@param p2 (bool) true - użytkownik zostanie zapytany o zgodę.
*/
#define IMC_CNT_REMOVE 231
/**Zwraca ilość kontaktów.
@return (int) liczba kontaktów.
*/
#define IMC_CNT_COUNT 201
/** Sprawdza czy podany kontakt znajduje sie w grupie.
@param p1 (int) ID kontaktu.
@param p2 (char*) - grupa do sprawdzenia (jeśli == 0 sprawdzi w grupie aktywnej)
@return (bool) true jeśli znajduje się...
*/
#define IMC_CNT_INGROUP 305
/** Kontakt został zmieniony.
Komunikat powinien być wysyłany \b tylko w sytuacji zmiany #CNT_UID, #CNT_NET, lub zaraz po dodaniu!
Do wszystkich wtyczek z typem #IMT_CONTACT zostanie rozesłane #IM_CNT_CHANGED, lub #IM_CNT_ADD.
Nie ma już potrzeby wysyłania #IMI_REFRESH_CNT
@param p1 ID kontaktu.
*/
#define IMC_CNT_CHANGED 232
#define IMC_CNT_SETSTATUS 234 ///< Zmienia status kontaktu.
/// sIMessage_StatusChange
#define IMC_IGN_FIND IMC_CNT_IGNORED
#define IMC_IGN_ADD 311 /**< Dodaje kontakt do listy ignorowanych.
\param p1 (int) sieć
\param p2 (char*) UID
*/
#define IMC_IGN_DEL 312 /**< Usuwa kontakt z listy ignorowanych.
\param p1 (int) sieć
\param p2 (char*) UID
*/
#define IMC_GRP_FIND 300 /**< Sprawdza czy grupa istnieje.
\param p1 (char*) nazwa grupy.
\return (bool) true jeśli istnieje.
*/
#define IMC_GRP_ADD 301 /**< Dodaje grupę.
\param p1 (char*) nazwa grupy.
*/
#define IMC_GRP_DEL 302 /**< Usuwa grupę.
\param p1 (char*) nazwa grupy.
*/
#define IMC_GRP_RENAME 303 /**< Zmienia nazwę grupy.
\param p1 (char*) stara nazwa grupy.
\param p2 (char*) nowa nazwa grupy.
*/
/** Komunikat do rejestrowania kolumn w tablicach.
\attention Może być wysyłane TYLKO PODCZAS przetwarzania komunikatu #IM_SETCOLS.
*/
class sIMessage_setColumn: public sIMessage_base {
public:
const static int __msgID = 1102;
tTable _table; ///< Tablica w której ustawiamy kolumnę
int _id; ///< ID kolumny.
int _type; ///< typ kolumny (patrz \ref dt_ct_).
union {
int _def; ///< Wartość domyślna.
const char * _def_ch; ///< Wartość domyślna dla kolumn #DT_CT_PCHAR (musi być ciągle w pamięci!)
__int64 * _def_p64; ///< Wartość domyślna dla kolumn #DT_CT_64 (musi być ciągle w pamięci!)
};
const char * _name;
sIMessage_setColumn(tTable table , int id , int type , int def , const char * name = 0):sIMessage_base(__msgID){
init(table , id , type , def , name);
}
sIMessage_setColumn(tTable table , int id , int type , const char * def , const char * name = 0):sIMessage_base(__msgID){
init(table , id , type , (int)def , name);
}
sIMessage_setColumn(int id , int type , int def , const char * name = 0):sIMessage_base(__msgID){
init(0 , id , type , (int)def , name);
}
sIMessage_setColumn(int id , int type , const char * def , const char * name = 0):sIMessage_base(__msgID){
init(0 , id , type , (int)def , name);
}
private:
void init(tTable table , int id , int type , int def , const char * name){
_table = table;
_id = id;
_type = type;
_def = def;
_name = name;
s_size = sizeof(*this);
}
};
#define IMC_CFG_SAVE 1010 ///< Wszystkie ustawienia zostaną zapisane.
// W32
#define IMC_GETINSTANCE 2000 ///< Zwraca HINSTANCE aplikacji.
// internal use only.
#define IMC_GETMSGCOLDESC 3000
/** @defgroup imc_mru_ MRU.
Obsługa listy ostatnio używanych.
@{
*/
#define MRU_SET_LOADFIRST 0x1 ///< Zawartość listy zostanie najpierw załadowana (działają też flagi dla MRU_GET_ !)
#define MRU_GET_ONEBUFF 0x10 ///< sMRU::buffer jest wskaźnikiem do bufora (o rozmiarze sMRU::buffSize), który zostanie użyty do wszystkich operacji
#define MRU_GET_USETEMP 0x20 ///< zostanie użyty tymczasowy bufor wewnętrzny rdzenia.
/** Struktura używana przez IMC_MRU_* */
struct sMRU {
int flags; ///< Flagi
const char * name; ///< Nazwa zestawu
int count; ///< Rozmiar zestawu
int buffSize; ///< Rozmiar buforów dla #IMC_MRU_GET
const char * current; ///< Przy #IMC_MRU_SET i #IMC_MRU_UPDATE podajemy dodawaną wartość.
union {
char ** values; ///< Tablica \a count buforów. Przy #IMC_MRU_GET muszą mieć rozmiar podany w \a buffSize.
/// Jeżeli jest mniej buforów niż w count, ostatnia pozycja musi być równa 0.
char * buffer; ///< Wskaźnik do pojedyńczego bufora trzymającego wszystkie informacje
};
const char * removed; /// #IMC_MRU_UPDATE zapisze tu element, który został odrzucony.
sMRU():flags(0),count(0),buffSize(0),name(0),current(0),values(0){}
};
#define IMC_MRU_SET 400 ///< (sIMessage_MRU*) Ustawia listę MRU.
#define IMC_MRU_GET 401 ///< (sIMessage_MRU*) Pobiera listę MRU.
#define IMC_MRU_UPDATE 402 ///< (sIMessage_MRU*) Aktualizuje listę MRU.
/** Struktura do przesyłania #IMC_MRU_GET, #IMC_MRU_SET i #IMC_MRU_UPDATE.*/
struct sIMessage_MRU:public sIMessage_base {
sMRU * MRU; ///< \brief \no
sIMessage_MRU(int id , sMRU * MRU):sIMessage_base(id),MRU(MRU){s_size=sizeof(*this);}
};
/** @} */
/** \} */ // Wiadomości do rdzenia
// -----------------------------------------------------------------------------------------------
// Wiadomosci do UI.dll
/**
\defgroup imi_ do UI
\brief \no
\{
*/