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 pathGG.h
174 lines (139 loc) · 5.42 KB
/
GG.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
/*
nazwa="GG API"
data="2003-04-25"
ver="1.1"
info="Nagłówek wtyczki GG."
*/
/** @file Nagłówek wtyczki GG.DLL
*/
/** @defgroup GG_shared_h Wtyczka GG.dll.
W API od wersji 1.1 znajduje się obsługa zdarzeń w libgadu.
Potrzebne będą również przynajmniej nagłówki libgadu, które dostępne jest do pobrania
na stronie domowej SDK.
Poniższy przykład powinien wszystko wyjaśnić...
@code
#include "gg_shared.h"
// (...)
// Gdzieś w kodzie "rejestrujemy" naszą wtyczkę. Np. w #IM_START
IMessage(IM_GG_REGISTERHANDLER,NET_GG,IMT_PROTOCOL,GGER_LOGIN|GGER_EVENT);
// Dzięki GGER_LOGIN będziemy mogli zmienić parametry logowania do
// poszczególnych serwerów, a GGER_EVENT przyśle każdą odpowiedź serwera.
// Możliwości jest jeszcze kilka...
// W IMessageProc musimy jeszcze obsłużyć #IM_GG_EVENT
case IM_GG_EVENT: {
sIMessage_GGEvent * me = static_cast<sIMessage_GGEvent*>(msgBase);
// W zależności od typu zdarzenia wykonujemy różne operacje
switch (me->event_type) {
// (...)
}
break;}
// Jeżeli będziemy chcieli gdzieś w kodzie skorzystać z sesji libgadu to:
gg_session * sess = IMessage(IM_GG_GETSESSION,NET_GG,IMT_PROTOCOL); // Pobieramy sesję
if (sess) {
// (...) operacje na sesji z wykorzystaniem libgaduw32.dll
// Każdą pobraną sesję TRZEBA zwolnić, ale TYLKO gdy zwrócona sesja jest != 0
IMessage(IM_GG_RELEASESESSION,NET_GG,IMT_PROTOCOL);
}
@endcode
@{
*/
#pragma once
#pragma pack(push, 1)
/** Zwraca wskaźnik do sesji libgadu (gg_session) lub 0
gdy nie ma ustanowionego połączenia. Po zakończeniu
operowania na sesji trzeba wywołać #IM_GG_RELEASESESSION.
Do samego sprawdzania istnienia połączenia najlepiej posłuży
#IM_ISCONNECTED.
@return (gg_session*) Wskaźnik sesji.
*/
#define IM_GG_GETSESSION IM_USER+10001
/** Zwalnia pobrany wcześniej wskaźnik sesji... */
#define IM_GG_RELEASESESSION IM_USER+10002
/** Wtyczka będzie otrzymywała powiadomienia przy wybranych
zdarzeniach w libgadu.
@param (int) połączone flagi GGER_ oznaczające o jakich zdarzeniach wtyczka powinna być powiadamiana.
*/
#define IM_GG_REGISTERHANDLER IM_USER+10003
enum GGER_enum {
GGER_LOGIN = 1, ///< Zaraz przed nawiązaniem połączenia. Można je anulować przez GGERF_ABORT
GGER_LOGGEDIN = 2, ///< Udane logowanie
GGER_LOGOUT = 4, ///< Zakończenie połączenia
GGER_EVENT = 8, ///< Zdarzenie sieciowe
GGER_FIRSTLOOP = 0x10, ///< Po zalogowaniu i przesłaniu wszystkich informacji (lista kontaktów, status itp.)
GGER_BEFORELOGIN = 0x20, ///< Zaraz przed rozpoczęciem procedury logowania (i przed określeniem IP serwera)
GGER_BEFORELOGOUT = 0x40, ///< Zaraz przed zakończeniem połączenia (nie zostanie wywołane w razie zerwania połączenia)
};
#define GGERF_ABORT 1 ///< Przerwanie obsługiwania Eventu...
/** Wtyczka, która zarejestrowała się jako handler otrzyma
ten komunikat w razie wystąpienia któregoś z "zamówionych"
zdarzeń. Komunikat będzie typu sIMessage_GGEvent.
@return Połączone flagi GGERF_ , lub 0.
*/
#define IM_GG_EVENT IM_USER+10100
/** Struktura do przesyłania IM_GG_EVENT */
struct sIMessage_GGEvent: public sIMessage_base {
GGER_enum eventType; ///< Typ zdarzenia - jedna z flag GGER_
/** W zależności od typu zdarzenia w data
przekazywana jest odpowiednia strukturka, lub 0.
Większość przekazywanych struktur można modyfikować.
Zdarzenia najczęściej wywoływane są PRZED wykonaniem
samej operacji...
*/
union {
struct gg_login_params * login_params; ///< Parametry logowania [GGER_LOGIN , GGER_BEFORELOGIN]
struct gg_event * event; ///< Zdarzenie sieciowe [GGER_EVENT]
void * pointer;
} data;
sIMessage_GGEvent()
:sIMessage_base() {s_size=sizeof(sIMessage_GGEvent);}
};
#define IM_GG_HTMLTOMSG IM_USER+10010
#define IM_GG_MSGTOHTML IM_USER+10011
struct sIMessage_GGHtmlFormat: public sIMessage_base {
sIMessage_GGHtmlFormat(bool fromHtml, const char* body, char* format, int formatSize):body(body), format(format), formatSize(formatSize), result(0) {
this->id = fromHtml ? IM_GG_HTMLTOMSG : IM_GG_MSGTOHTML;
s_size=sizeof(*this);
}
const char* body;
const char* result;
char* format;
int formatSize;
};
#define CFG_GG_LOGIN 1053
#define CFG_GG_PASS 1054
#define CFG_GG_STATUS 1055 //INT
#define CFG_GG_STARTSTATUS 1056 //INT
#define CFG_GG_DESCR 1057 //INT
#define CFG_GG_SERVER 1059
#define CFG_GG_SERVERCHOSEN 1060
#define CFG_GG_TRAYMENU 1061
#define CFG_GG_FRIENDSONLY 1058 //INT
#define CFG_GG_USESSL 1063
#define CFG_GG_DONTRESUMEDISCONNECTED 1064
#define IMIA_GGSTATUS_OFFLINE 1001
#define IMIA_GGSTATUS_ONLINE 1002
#define IMIA_GGSTATUS_AWAY 1003
#define IMIA_GGSTATUS_HIDDEN 1004
#define IMIA_GGSTATUS_DESC 1005
#define IMIG_GGSTATUS_SERVER 1020
#define IMIG_MAIN_OPTIONS_LIST_GG 1010
#define IMIA_LIST_GG_IMPORT 1011
#define IMIA_LIST_GG_EXPORT 1012
#define IMIA_LIST_GG_CLEAR 1013
#define IMIA_LIST_GG_REFRESH 1014
#define IMIA_GGHIDESTATUS 1015
#define IMIA_NFO_GGSAVE 1022
#define IMIA_NFO_GGREFRESH 1021
#define IMIG_GGSTATUS 1000
#define IMIG_GGCFG_USER 1050
#define IMIC_GG_ACCOUNT 1051
#define IMIC_GG_NEWPASS 1052
#define IMIC_GG_REMINDPASS 1053
#define IMIC_GG_DEFSERVERS 1054
#define IMIC_GG_REMOVEACCOUNT 1055
#define IMIC_GG_SERVERSSSLONLY 1056
//#define IMIC_GG_PORT 1052
//#define IMIC_GG_LOGIN 1053
//#define IMIC_GG_PASS 1054
#pragma pack(pop)
/**@}*/