Repository navigation
Expand file tree
/
Copy pathTMLCore.java
More file actions
487 lines (457 loc) · 14.9 KB
/
Copy pathTMLCore.java
File metadata and controls
487 lines (457 loc) · 14.9 KB
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
/*
* libTML: A BEEP based Messaging Suite
* Copyright (C) 2015 wobe-systems GmbH
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA
*
* You may find a copy of the license under this software is released
* at COPYING file. This is LGPL software: you are welcome to develop
* proprietary applications using this library without any royalty or
* fee but returning back any change, improvement or addition in the
* form of source code, project image, documentation patches, etc.
*
* Homepage:
* http://www.libtml.org
*
* For professional support contact us:
*
* wobe-systems GmbH
*/
package com.tmlsidex.tml;
import com.tmlsidex.jni.Tml;
import com.tmlsidex.jni.TmlSidexException;
/**
* @ingroup tmlClasses
* @brief The TML core manages all communication of a peer.
*/
public class TMLCore extends Object{
// Member
long m_var = 0;
Tml m_tml = null;
Object[] m_CmdReadyObjArr = null;
Object[] m_CmdProgressObjArr = null;
Object[] m_CmdStatusObjArr = null;
/**
* @brief constructs a TMLCore instance
*
* The constructor opens a TML core.
*
* @throws TmlSidexException
*/
public TMLCore() throws TmlSidexException{
m_tml = new Tml();
m_var = m_tml.tml_Core_Open(0);
}
/**
* @brief constructs a TMLCore instance
*
* The constructor opens a TML core with a specirfic log value for debugging
* communication.
*
* @param iLog logging value
*
* @throws TmlSidexException
*/
public TMLCore(int iLog) throws TmlSidexException{
m_tml = new Tml();
m_var = m_tml.tml_Core_Open(iLog);
}
/**
* @brief destructor
*/
protected void finalize() throws Throwable {
m_CmdReadyObjArr = null;
m_CmdProgressObjArr = null;
m_CmdStatusObjArr = null;
// Internal destructrion:
if (0 >= m_var){
m_tml.tml_Core_Close(m_var);
}
m_tml = null;
m_var = 0;
// Super destructrion
super.finalize();
}
/**
* @brief get listener status
*
* @return listener status, true if listener is enabled, false is listener is disabled
*
* @throws TmlSidexException
*/
public boolean getListenerEnabled() throws TmlSidexException{
return m_tml.tml_Core_Get_ListenerEnabled(m_var);
}
/**
* @brief get the listener interface (IP)
*
* @return interface IP
*
* @throws TmlSidexException
*/
public String getListenerIP() throws TmlSidexException{
return m_tml.tml_Core_Get_ListenerIP(m_var);
}
/**
* @brief get the listener port number
*
* @return port number
*
* @throws TmlSidexException
*/
public String getListenerPort() throws TmlSidexException{
return m_tml.tml_Core_Get_ListenerPort(m_var);
}
/**
* @brief enable or disable the TML listener
*
* @note The interface IP and port have to be configured
* before enabling the listener.
*
* @param bEnable true to enable, false to disable the listener
*
* @throws TmlSidexException
*/
public void setListenerEnabled(boolean bEnable) throws TmlSidexException{
m_tml.tml_Core_Set_ListenerEnabled(m_var, bEnable);
}
/**
* @brief set the listener interface (IP)
*
* The listener can be assigned to a specific network interface
* or to all network interfaces available ("0.0.0.0) which is the default.
*
* @param sIP interface IP
*
* @throws TmlSidexException
*/
public void setListenerIP(String sIP) throws TmlSidexException{
m_tml.tml_Core_Set_ListenerIP(m_var, sIP);
}
/**
* @brief set listener port
*
* @param sPort number, 0 = random port number, default 44000
*
* @throws TmlSidexException
*/
public void setListenerPort(String sPort) throws TmlSidexException{
m_tml.tml_Core_Set_ListenerPort(m_var, sPort);
}
/**
* @brief get the maximum event connection fail count
*
* The maximum connection fail count defines after how many unsuccessful
* tries to send an event an event consumer is automatically removed from the list.
* A value of 0 means it is never removed. The default value is 1.
*
* @return maximum fail count
*
* @throws TmlSidexException
*/
public int getMaxEvtFailCount() throws TmlSidexException{
return m_tml.tml_Evt_Get_MaxConnectionFailCount(m_var);
}
/**
* @brief get the maximum value of queued event messages.
*
* If the maximum number of queued events for an event consumer
* is reached, the oldest event is deleted. The default value is 1000.
*
* @return maximum queue count
*
* @throws TmlSidexException
*/
public int getEvtQueueSize() throws TmlSidexException{
return m_tml.tml_Evt_Get_MaxQueuedEventMessages(m_var);
}
/**
* @brief set the maximum event connection fail count
*
* The maximum connection fail count defines after how many unsuccessful
* tries to send an event an event consumer is automatically removed from the list.
* A value of 0 means it is never removed. The default value is 1.
*
* @param iCount maximum fail count
*
* @throws TmlSidexException
*/
public void setMaxEvtFailCount(int iCount) throws TmlSidexException{
m_tml.tml_Evt_Set_MaxConnectionFailCount(m_var, iCount);
}
/**
* @brief set the maximum value of queued events
*
* If the maximum number of queued events for an event consumer
* is reached, the oldest event will be deleted. The default value is 1000.
*
* @param iMaximum maximum queue count
*
* @throws TmlSidexException
*/
public void setEvtQueueSize(int iMaximum) throws TmlSidexException{
m_tml.tml_Evt_Set_MaxQueuedEventMessages(m_var, iMaximum);
}
/**
* @brief get the maximum load balancing connection fail count
*
* The maximum connection fail count defines after how many unsuccessful
* tries to connect, an event consumer is automatically removed from the list.
* A value of 0 means it is never removed.
* The default value is 1.
*
* @return maximum fail count
*
* @throws TmlSidexException
*/
public int getMaxBalFailCount() throws TmlSidexException{
return m_tml.tml_Bal_Get_MaxConnectionFailCount(m_var);
}
/**
* @brief set the maximum load balancing connection fail count
*
* The maximum connection fail count defines after how many unsuccessful
* tries to connect, an event consumer is automatically removed from the list.
* A value of 0 means it is never removed.
* The default value is 1.
*
* @param iCount maximum fail count
*
* @throws TmlSidexException
*/
public void setMaxBalFailCount(int iCount) throws TmlSidexException{
m_tml.tml_Bal_Set_MaxConnectionFailCount(m_var, iCount);
}
/**
* @brief register cmd callback handler
*
* @param cmd TMLCmd object
*
* @throws TmlSidexException
*/
private void registerCmdCallbackHandler(TMLCmd cmd) throws TmlSidexException{
if (null != m_CmdReadyObjArr){
TMLCmdReadyIF[] cbInstanceCmdReady = new TMLCmdReadyIF[1];
Object[] pCBData = new Object[1];
cmd.registeredCmdReady(cbInstanceCmdReady, pCBData);
if (null == cbInstanceCmdReady[0]){
cmd.registerCmdReady((TMLCmdReadyIF)m_CmdReadyObjArr[0], m_CmdReadyObjArr[1]);
}
cbInstanceCmdReady = null;
pCBData = null;
}
if (null != m_CmdProgressObjArr){
TMLCmdProgressReplyIF[] cbInstanceCmdProgress = new TMLCmdProgressReplyIF[1];
Object[] pCBData = new Object[1];
cmd.registeredCmdProgressReply(cbInstanceCmdProgress, pCBData);
if (null == cbInstanceCmdProgress[0]){
cmd.registerCmdProgressReply((TMLCmdProgressReplyIF)m_CmdProgressObjArr[0], m_CmdProgressObjArr[1]);
}
cbInstanceCmdProgress = null;
pCBData = null;
}
if (null != m_CmdStatusObjArr){
TMLCmdStatusReplyIF[] cbInstanceCmdStatus = new TMLCmdStatusReplyIF[1];
Object[] pCBData = new Object[1];
cmd.registeredCmdStatusReply(cbInstanceCmdStatus, pCBData);
if (null == cbInstanceCmdStatus[0]){
cmd.registerCmdStatusReply((TMLCmdStatusReplyIF)m_CmdStatusObjArr[0], m_CmdStatusObjArr[1]);
}
cbInstanceCmdStatus = null;
pCBData = null;
}
}
/**
* @brief send an asynchronous message
*
* The call returns after sending the message without waiting for a reply.
* To process a reply the command ready event is called.
*
* @param sHost hostname or IP address
* @param sPort port number
* @param sProfile profile name
* @param cmd TMLCmd object
* @param timeout timeout in milliseconds
*
* @throws TmlSidexException
*/
public void sendAsyncMessage(String sHost, String sPort, String sProfile, TMLCmd cmd, long timeout) throws TmlSidexException{
registerCmdCallbackHandler(cmd);
long cmdHandle = cmd.getVHandle();
m_tml.tml_Send_AsyncMessage(m_var, cmdHandle, sProfile, sHost, sPort, timeout);
}
/**
* @brief send a synchronous message
*
* Sending a message synchronously means that the call waits for a reply
* and returns the result of the message or an error.
*
* @param sHost hostname or IP address
* @param sPort port number
* @param sProfile profile name
* @param cmd TMLCmd object
* @param timeout timeout in milliseconds
*
* @throws TmlSidexException
*/
public void sendSyncMessage(String sHost, String sPort, String sProfile, TMLCmd cmd, long timeout) throws TmlSidexException{
registerCmdCallbackHandler(cmd);
long cmdHandle = cmd.getVHandle();
m_tml.tml_Send_SyncMessage(m_var, cmdHandle, sProfile, sHost, sPort, timeout);
}
/**
* @brief get low level TML core handle
*
* @return TML core handle
*/
public long getCHandle(){
return m_var;
}
/**
* @brief register command ready handler
*
* The result of a command is passed to a command ready handler. In case of asynchronous commands
* this is the only way to process the reply.
*
* @param cbInstance instance of an implementation of the callback method interface / set null for deregistration
* @param pCBData custom data or null
*
* @throws TmlSidexException
* @see TMLCmdReadyIF
* @see TMLCmd#registerCmdReady(TMLCmdReadyIF, Object)
*/
public void registerCmdReady(TMLCmdReadyIF cbInstance, Object pCBData) throws TmlSidexException {
if (null == m_CmdReadyObjArr){
m_CmdReadyObjArr = new Object[2];
}
m_CmdReadyObjArr[0] = cbInstance;
m_CmdReadyObjArr[1] = pCBData;
}
/**
* @brief register progress reply handler
*
* The progress reply handler is called if a progress reply was received.
*
* @param cbInstance instance of an implementation of the callback method interface / set null for deregistration
* @param pCBData custom data or null
*
* @throws TmlSidexException
* @see TMLCmdProgressReplyIF
* @see TMLCmd#registerCmdProgressReply(TMLCmdProgressReplyIF, Object)
*/
public void registerCmdProgressReply(TMLCmdProgressReplyIF cbInstance, Object pCBData) throws TmlSidexException {
if (null == m_CmdProgressObjArr){
m_CmdProgressObjArr = new Object[2];
}
m_CmdProgressObjArr[0] = cbInstance;
m_CmdProgressObjArr[1] = pCBData;
}
/**
* @brief register status reply handler
*
* The status reply handler is called if a status reply was received.
*
* @param cbInstance instance of an implementation of the callback method interface / set null for deregistration
* @param pCBData custom data or null
*
* @throws TmlSidexException
* @see TMLCmdStatusReplyIF
* @see TMLCmd#registerCmdStatusReply(TMLCmdStatusReplyIF, Object)
*/
public void registerCmdStatusReply(TMLCmdStatusReplyIF cbInstance, Object pCBData) throws TmlSidexException {
if (null == m_CmdStatusObjArr){
m_CmdStatusObjArr = new Object[2];
}
m_CmdStatusObjArr[0] = cbInstance;
m_CmdStatusObjArr[1] = pCBData;
}
/**
* @brief get registered command ready handler and custom data
*
* @param cbInstance array of size 1 containing command ready handler
* @param pCBData array of size 1 - returns custom data
*
* @throws TmlSidexException
* @see TMLCmdReadyIF
*/
public void registeredCmdReady(TMLCmdReadyIF[] cbInstance, Object[] pCBData) throws TmlSidexException {
if (null == m_CmdReadyObjArr){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
if (null == m_CmdReadyObjArr[0]){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
cbInstance[0] = (TMLCmdReadyIF) m_CmdReadyObjArr[0];
pCBData[0] = m_CmdReadyObjArr[1];
}
}
}
/**
* @brief get registered progress reply handler and custom data
*
* @param cbInstance array of size 1 containing progress reply handler
* @param pCBData array of size 1 - returns custom data
*
* @throws TmlSidexException
* @see TMLCmdProgressReplyIF
*/
public void registeredCmdProgressReply(TMLCmdProgressReplyIF[] cbInstance, Object[] pCBData) throws TmlSidexException{
if (null == m_CmdProgressObjArr){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
if (null == m_CmdProgressObjArr[0]){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
cbInstance[0] = (TMLCmdProgressReplyIF) m_CmdProgressObjArr[0];
pCBData[0] = m_CmdProgressObjArr[1];
}
}
}
/**
* @brief get registered status reply handler and custom data
*
* @param cbInstance array of size 1 containing status reply handler
* @param pCBData array of size 1 - returns custom data
*
* @throws TmlSidexException
* @see TMLCmdStatusReplyIF
*/
public void registeredCmdStatusReply(TMLCmdStatusReplyIF[] cbInstance, Object[] pCBData) throws TmlSidexException{
if (null == m_CmdStatusObjArr){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
if (null == m_CmdStatusObjArr[0]){
cbInstance[0] = null;
pCBData[0] = null;
}
else{
cbInstance[0] = (TMLCmdStatusReplyIF)m_CmdStatusObjArr[0];
pCBData[0] = m_CmdStatusObjArr[1];
}
}
}
}