Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ademco_hb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
ademco_hb
Commits
2e893557
Commit
2e893557
authored
Nov 20, 2023
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update swig demos
parent
6a75e9e7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
641 additions
and
637 deletions
+641
-637
CSharpDemo.cs
swig/CSharpDemo.cs
+239
-239
JavaDemo.java
swig/JavaDemo.java
+396
-394
nodejs-demo.js
swig/nodejs-demo.js
+6
-4
No files found.
swig/CSharpDemo.cs
View file @
2e893557
using
System
;
using
System
;
using
System.Diagnostics
;
using
System.Diagnostics
;
using
System.Runtime.InteropServices
;
using
System.Runtime.InteropServices
;
using
System.Text.RegularExpressions
;
using
System.Text.RegularExpressions
;
using
System.Net
;
using
System.Net
;
using
System.Net.Sockets
;
using
System.Net.Sockets
;
using
System.Text
;
using
System.Text
;
using
System.Threading
;
using
System.Threading
;
using
System.IO
;
using
System.IO
;
using
System.Collections.Concurrent
;
using
System.Collections.Concurrent
;
using
com.hb3344.ademco
;
using
com.hb3344.ademco
;
namespace
CSharpDemo
namespace
CSharpDemo
{
{
class
Program
class
Program
{
{
static
void
Main
(
string
[]
args
)
static
void
Main
(
string
[]
args
)
{
{
// test parse
// test parse
{
{
Console
.
WriteLine
(
"test parse"
);
Console
.
WriteLine
(
"test parse"
);
string
str
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
string
str
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
byte
[]
raw
=
Encoding
.
ASCII
.
GetBytes
(
str
);
byte
[]
raw
=
Encoding
.
ASCII
.
GetBytes
(
str
);
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
raw
,
(
uint
)
raw
.
Length
,
pkt
,
cb
);
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
raw
,
(
uint
)
raw
.
Length
,
pkt
,
cb
,
null
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
libademco
.
size_tp_value
(
cb
)
==
(
uint
)
str
.
Length
);
Debug
.
Assert
(
libademco
.
size_tp_value
(
cb
)
==
(
uint
)
str
.
Length
);
Debug
.
Assert
(
pkt
.
crc
==
0xC5C3
);
Debug
.
Assert
(
pkt
.
crc
==
0xC5C3
);
Debug
.
Assert
(
pkt
.
len
==
0x0053
);
Debug
.
Assert
(
pkt
.
len
==
0x0053
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
Debug
.
Assert
(
pkt
.
seq
==
0
);
Debug
.
Assert
(
pkt
.
seq
==
0
);
Debug
.
Assert
(
pkt
.
acct
==
"90219125916578"
);
Debug
.
Assert
(
pkt
.
acct
==
"90219125916578"
);
Debug
.
Assert
(
pkt
.
data
.
ademcoId
==
0
);
Debug
.
Assert
(
pkt
.
data
.
ademcoId
==
0
);
Debug
.
Assert
(
pkt
.
data
.
ademcoEvent
==
AdemcoEvent
.
EVENT_I_AM_WIRE_MACHINE
);
Debug
.
Assert
(
pkt
.
data
.
ademcoEvent
==
AdemcoEvent
.
EVENT_I_AM_WIRE_MACHINE
);
Debug
.
Assert
(
pkt
.
data
.
gg
==
0
);
Debug
.
Assert
(
pkt
.
data
.
gg
==
0
);
Debug
.
Assert
(
pkt
.
data
.
zone
==
0
);
Debug
.
Assert
(
pkt
.
data
.
zone
==
0
);
Console
.
WriteLine
(
"res={0:D}, commited={1:D}"
,
res
,
libademco
.
size_tp_value
(
cb
));
Console
.
WriteLine
(
"res={0:D}, commited={1:D}"
,
res
,
libademco
.
size_tp_value
(
cb
));
}
}
// test pack
// test pack
{
{
Console
.
WriteLine
(
"test pack"
);
Console
.
WriteLine
(
"test pack"
);
byte
[]
buff
=
new
byte
[
1024
];
byte
[]
buff
=
new
byte
[
1024
];
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Debug
.
Assert
(
len
>
0
);
Debug
.
Assert
(
len
>
0
);
Console
.
WriteLine
(
"len={0:D}"
,
len
);
Console
.
WriteLine
(
"len={0:D}"
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
Console
.
WriteLine
(
"test parse packed data"
);
Console
.
WriteLine
(
"test parse packed data"
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buff
,
len
,
pkt
,
cb
);
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buff
,
len
,
pkt
,
cb
,
null
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
libademco
.
size_tp_value
(
cb
)
==
len
);
Debug
.
Assert
(
libademco
.
size_tp_value
(
cb
)
==
len
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
Debug
.
Assert
(
pkt
.
seq
==
1
);
Debug
.
Assert
(
pkt
.
seq
==
1
);
Debug
.
Assert
(
pkt
.
acct
==
"861234567890"
);
Debug
.
Assert
(
pkt
.
acct
==
"861234567890"
);
Debug
.
Assert
(
pkt
.
data
.
ademcoId
==
666666
);
Debug
.
Assert
(
pkt
.
data
.
ademcoId
==
666666
);
Debug
.
Assert
(
pkt
.
data
.
ademcoEvent
==
AdemcoEvent
.
EVENT_ARM
);
Debug
.
Assert
(
pkt
.
data
.
ademcoEvent
==
AdemcoEvent
.
EVENT_ARM
);
Debug
.
Assert
(
pkt
.
data
.
gg
==
0
);
Debug
.
Assert
(
pkt
.
data
.
gg
==
0
);
Debug
.
Assert
(
pkt
.
data
.
zone
==
0
);
Debug
.
Assert
(
pkt
.
data
.
zone
==
0
);
}
}
// test pack
// test pack
// buff not enough
// buff not enough
{
{
Console
.
WriteLine
(
"test pack, buff not enough"
);
Console
.
WriteLine
(
"test pack, buff not enough"
);
Byte
[]
buff
=
new
Byte
[
10
];
Byte
[]
buff
=
new
Byte
[
10
];
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
10
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
10
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Debug
.
Assert
(
len
==
0
);
Debug
.
Assert
(
len
==
0
);
}
}
Console
.
WriteLine
(
""
);
Console
.
WriteLine
(
""
);
simpleServer
(
12345
);
simpleServer
(
12345
);
}
}
static
void
simpleServer
(
int
port
)
static
void
simpleServer
(
int
port
)
{
{
Console
.
WriteLine
(
"running simpleServer {0:D}"
,
port
);
Console
.
WriteLine
(
"running simpleServer {0:D}"
,
port
);
try
try
{
{
var
listener
=
new
TcpListener
(
IPAddress
.
Any
,
port
);
var
listener
=
new
TcpListener
(
IPAddress
.
Any
,
port
);
listener
.
Start
();
listener
.
Start
();
while
(
true
)
while
(
true
)
{
{
TcpClient
client
=
listener
.
AcceptTcpClient
();
TcpClient
client
=
listener
.
AcceptTcpClient
();
Thread
thread
=
new
Thread
(
new
ParameterizedThreadStart
(
clientHandler
));
Thread
thread
=
new
Thread
(
new
ParameterizedThreadStart
(
clientHandler
));
thread
.
Start
(
client
);
thread
.
Start
(
client
);
}
}
}
}
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
Console
.
WriteLine
(
e
.
Message
);
Console
.
WriteLine
(
e
.
Message
);
}
}
}
}
static
byte
[]
append
(
byte
[]
origin
,
byte
[]
buf
,
int
len
)
static
byte
[]
append
(
byte
[]
origin
,
byte
[]
buf
,
int
len
)
{
{
byte
[]
dst
=
new
byte
[
origin
.
Length
+
len
];
byte
[]
dst
=
new
byte
[
origin
.
Length
+
len
];
Array
.
ConstrainedCopy
(
origin
,
0
,
dst
,
0
,
origin
.
Length
);
Array
.
ConstrainedCopy
(
origin
,
0
,
dst
,
0
,
origin
.
Length
);
Array
.
ConstrainedCopy
(
buf
,
0
,
dst
,
origin
.
Length
,
len
);
Array
.
ConstrainedCopy
(
buf
,
0
,
dst
,
origin
.
Length
,
len
);
return
dst
;
return
dst
;
}
}
static
byte
[]
eat
(
byte
[]
origin
,
int
len
)
static
byte
[]
eat
(
byte
[]
origin
,
int
len
)
{
{
if
(
origin
.
Length
==
len
)
{
return
new
byte
[
0
];
}
if
(
origin
.
Length
==
len
)
{
return
new
byte
[
0
];
}
byte
[]
dst
=
new
byte
[
origin
.
Length
-
len
];
byte
[]
dst
=
new
byte
[
origin
.
Length
-
len
];
Array
.
ConstrainedCopy
(
origin
,
len
,
dst
,
0
,
origin
.
Length
-
len
);
Array
.
ConstrainedCopy
(
origin
,
len
,
dst
,
0
,
origin
.
Length
-
len
);
return
dst
;
return
dst
;
}
}
static
ushort
nextSeq
(
ushort
seq
)
static
ushort
nextSeq
(
ushort
seq
)
{
{
if
(++
seq
==
10000
)
{
seq
=
1
;
}
if
(++
seq
==
10000
)
{
seq
=
1
;
}
return
seq
;
return
seq
;
}
}
static
void
clientHandler
(
object
cli
)
static
void
clientHandler
(
object
cli
)
{
{
TcpClient
client
=
(
TcpClient
)
cli
;
TcpClient
client
=
(
TcpClient
)
cli
;
NetworkStream
stream
=
client
.
GetStream
();
NetworkStream
stream
=
client
.
GetStream
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
byte
[]
buff
=
new
byte
[
0
];
byte
[]
buff
=
new
byte
[
0
];
int
nread
=
0
;
int
nread
=
0
;
uint
ademco_id
=
0
;
uint
ademco_id
=
0
;
string
acct
=
""
;
string
acct
=
""
;
HbMachineType
type
=
HbMachineType
.
HMT_INVALID
;
HbMachineType
type
=
HbMachineType
.
HMT_INVALID
;
HbMachineStatus
status
=
HbMachineStatus
.
HMS_INVALID
;
HbMachineStatus
status
=
HbMachineStatus
.
HMS_INVALID
;
ushort
seq
=
0
;
ushort
seq
=
0
;
int
counter
=
1
;
int
counter
=
1
;
while
(
true
)
while
(
true
)
{
{
byte
[]
msg
=
new
byte
[
1024
];
byte
[]
msg
=
new
byte
[
1024
];
try
try
{
{
nread
=
stream
.
Read
(
msg
,
0
,
1024
);
nread
=
stream
.
Read
(
msg
,
0
,
1024
);
}
}
catch
catch
{
{
break
;
break
;
}
}
if
(
nread
==
0
)
{
break
;
}
if
(
nread
==
0
)
{
break
;
}
buff
=
append
(
buff
,
msg
,
nread
);
buff
=
append
(
buff
,
msg
,
nread
);
AdemcoParseResult
res
=
AdemcoParseResult
.
RESULT_OK
;
AdemcoParseResult
res
=
AdemcoParseResult
.
RESULT_OK
;
while
(
res
==
AdemcoParseResult
.
RESULT_OK
)
while
(
res
==
AdemcoParseResult
.
RESULT_OK
)
{
{
res
=
libademco
.
ademcoPacketParse
(
buff
,
(
uint
)
buff
.
Length
,
pkt
,
cb
);
res
=
libademco
.
ademcoPacketParse
(
buff
,
(
uint
)
buff
.
Length
,
pkt
,
cb
,
null
);
switch
(
res
)
switch
(
res
)
{
{
case
AdemcoParseResult
.
RESULT_OK
:
case
AdemcoParseResult
.
RESULT_OK
:
Console
.
Write
(
"C:"
);
libademco
.
ademcoPrint
(
buff
,
libademco
.
size_tp_value
(
cb
));
Console
.
Write
(
"C:"
);
libademco
.
ademcoPrint
(
buff
,
libademco
.
size_tp_value
(
cb
));
buff
=
eat
(
buff
,
(
int
)
libademco
.
size_tp_value
(
cb
));
buff
=
eat
(
buff
,
(
int
)
libademco
.
size_tp_value
(
cb
));
switch
(
pkt
.
id
)
switch
(
pkt
.
id
)
{
{
case
AdemcoPacketId
.
AID_NULL
:
case
AdemcoPacketId
.
AID_NULL
:
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
break
;
break
;
case
AdemcoPacketId
.
AID_HB
:
case
AdemcoPacketId
.
AID_HB
:
case
AdemcoPacketId
.
AID_ADM_CID
:
case
AdemcoPacketId
.
AID_ADM_CID
:
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
acct
=
pkt
.
acct
;
acct
=
pkt
.
acct
;
ademco_id
=
pkt
.
data
.
ademcoId
;
ademco_id
=
pkt
.
data
.
ademcoId
;
if
(
libademco
.
ademcoIsMachineTypeEvent
(
pkt
.
data
.
ademcoEvent
)
!=
0
)
if
(
libademco
.
ademcoIsMachineTypeEvent
(
pkt
.
data
.
ademcoEvent
)
!=
0
)
{
{
type
=
libademco
.
hbMachineTypeFromAdemcoEvent
(
pkt
.
data
.
ademcoEvent
);
type
=
libademco
.
hbMachineTypeFromAdemcoEvent
(
pkt
.
data
.
ademcoEvent
);
}
}
if
(
libademco
.
ademcoIsMachineStatusEvent
(
pkt
.
data
.
ademcoEvent
)
!=
0
)
if
(
libademco
.
ademcoIsMachineStatusEvent
(
pkt
.
data
.
ademcoEvent
)
!=
0
)
{
{
status
=
libademco
.
hbMachineStatusFromAdemcoEvent
(
pkt
.
data
.
ademcoEvent
);
status
=
libademco
.
hbMachineStatusFromAdemcoEvent
(
pkt
.
data
.
ademcoEvent
);
}
}
// 演示如何进行布撤防,真实项目里可以删改本段
// 演示如何进行布撤防,真实项目里可以删改本段
if
(++
counter
%
5
==
0
)
if
(++
counter
%
5
==
0
)
{
{
if
(
status
==
HbMachineStatus
.
HMS_ARM
)
if
(
status
==
HbMachineStatus
.
HMS_ARM
)
{
{
sendDisarm
(
stream
,
nextSeq
(
seq
),
acct
,
ademco_id
,
"123456"
);
sendDisarm
(
stream
,
nextSeq
(
seq
),
acct
,
ademco_id
,
"123456"
);
}
}
else
else
{
{
sendArm
(
stream
,
nextSeq
(
seq
),
acct
,
ademco_id
);
sendArm
(
stream
,
nextSeq
(
seq
),
acct
,
ademco_id
);
}
}
}
}
break
;
break
;
default
:
default
:
break
;
break
;
}
}
break
;
break
;
case
AdemcoParseResult
.
RESULT_ERROR
:
case
AdemcoParseResult
.
RESULT_ERROR
:
buff
=
new
byte
[
0
];
buff
=
new
byte
[
0
];
break
;
break
;
}
}
}
}
}
}
}
}
static
void
replyAck
(
NetworkStream
stream
,
ushort
seq
,
string
acct
)
static
void
replyAck
(
NetworkStream
stream
,
ushort
seq
,
string
acct
)
{
{
byte
[]
buff
=
new
byte
[
1024
];
byte
[]
buff
=
new
byte
[
1024
];
uint
len
=
libademco
.
ademcoMakeAckPacket
(
buff
,
1024
,
seq
,
acct
,
0
);
uint
len
=
libademco
.
ademcoMakeAckPacket
(
buff
,
1024
,
seq
,
acct
,
0
);
Console
.
Write
(
"S:"
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
}
static
void
sendArm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
)
static
void
sendArm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
)
{
{
byte
[]
buff
=
new
byte
[
1024
];
byte
[]
buff
=
new
byte
[
1024
];
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Console
.
Write
(
"S:"
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
}
static
void
sendDisarm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
,
string
pwd
)
static
void
sendDisarm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
,
string
pwd
)
{
{
byte
[]
buff
=
new
byte
[
1024
];
byte
[]
buff
=
new
byte
[
1024
];
AdemcoXDataSegment
xdata
=
null
;
AdemcoXDataSegment
xdata
=
null
;
if
(!
string
.
IsNullOrEmpty
(
pwd
))
if
(!
string
.
IsNullOrEmpty
(
pwd
))
{
{
xdata
=
new
AdemcoXDataSegment
();
xdata
=
new
AdemcoXDataSegment
();
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
Encoding
.
ASCII
.
GetBytes
(
pwd
),
(
uint
)
pwd
.
Length
);
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
Encoding
.
ASCII
.
GetBytes
(
pwd
),
(
uint
)
pwd
.
Length
);
}
}
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_DISARM
,
0
,
0
,
xdata
);
uint
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_DISARM
,
0
,
0
,
xdata
);
Console
.
Write
(
"S:"
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
}
}
}
}
}
swig/JavaDemo.java
View file @
2e893557
import
java.io.*
;
import
java.io.*
;
import
java.net.*
;
import
java.net.*
;
import
java.nio.ByteBuffer
;
import
java.nio.ByteBuffer
;
import
java.nio.channels.SelectionKey
;
import
java.nio.channels.SelectionKey
;
import
java.nio.channels.Selector
;
import
java.nio.channels.Selector
;
import
java.nio.channels.ServerSocketChannel
;
import
java.nio.channels.ServerSocketChannel
;
import
java.nio.channels.SocketChannel
;
import
java.nio.channels.SocketChannel
;
import
java.util.*
;
import
java.util.*
;
import
com.hb3344.ademco.*
;
import
com.hb3344.ademco.*
;
public
class
JavaDemo
{
public
class
JavaDemo
{
static
{
static
{
try
{
try
{
System
.
loadLibrary
(
"ademco_java"
);
System
.
loadLibrary
(
"ademco_java"
);
}
catch
(
UnsatisfiedLinkError
e
)
{
}
catch
(
UnsatisfiedLinkError
e
)
{
System
.
err
.
println
(
System
.
err
.
println
(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n"
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n"
+
e
);
+
e
);
System
.
exit
(
1
);
System
.
exit
(
1
);
}
}
}
}
private
Selector
selector
;
private
Selector
selector
;
private
Map
<
SocketChannel
,
Client
>
clients
;
private
Map
<
SocketChannel
,
Client
>
clients
;
private
InetSocketAddress
listenAddr
;
private
InetSocketAddress
listenAddr
;
public
JavaDemo
(
String
addr
,
int
port
)
throws
IOException
{
public
JavaDemo
(
String
addr
,
int
port
)
throws
IOException
{
listenAddr
=
new
InetSocketAddress
(
addr
,
port
);
listenAddr
=
new
InetSocketAddress
(
addr
,
port
);
clients
=
new
HashMap
<
SocketChannel
,
Client
>();
clients
=
new
HashMap
<
SocketChannel
,
Client
>();
}
}
private
void
start
()
throws
IOException
{
private
void
start
()
throws
IOException
{
selector
=
Selector
.
open
();
selector
=
Selector
.
open
();
ServerSocketChannel
channel
=
ServerSocketChannel
.
open
();
ServerSocketChannel
channel
=
ServerSocketChannel
.
open
();
channel
.
configureBlocking
(
false
);
channel
.
configureBlocking
(
false
);
channel
.
socket
().
bind
(
listenAddr
);
channel
.
socket
().
bind
(
listenAddr
);
channel
.
register
(
selector
,
SelectionKey
.
OP_ACCEPT
);
channel
.
register
(
selector
,
SelectionKey
.
OP_ACCEPT
);
System
.
out
.
println
(
"Server started..."
);
System
.
out
.
println
(
"Server started..."
);
while
(
true
)
{
while
(
true
)
{
selector
.
select
();
selector
.
select
();
Iterator
keys
=
selector
.
selectedKeys
().
iterator
();
Iterator
keys
=
selector
.
selectedKeys
().
iterator
();
while
(
keys
.
hasNext
())
{
while
(
keys
.
hasNext
())
{
SelectionKey
key
=
(
SelectionKey
)
keys
.
next
();
SelectionKey
key
=
(
SelectionKey
)
keys
.
next
();
keys
.
remove
();
keys
.
remove
();
if
(!
key
.
isValid
())
if
(!
key
.
isValid
())
continue
;
continue
;
if
(
key
.
isAcceptable
())
if
(
key
.
isAcceptable
())
accept
(
key
);
accept
(
key
);
else
if
(
key
.
isReadable
())
else
if
(
key
.
isReadable
())
read
(
key
);
read
(
key
);
}
}
}
}
}
}
private
void
accept
(
SelectionKey
key
)
throws
IOException
{
private
void
accept
(
SelectionKey
key
)
throws
IOException
{
ServerSocketChannel
sChannel
=
(
ServerSocketChannel
)
key
.
channel
();
ServerSocketChannel
sChannel
=
(
ServerSocketChannel
)
key
.
channel
();
SocketChannel
channel
=
sChannel
.
accept
();
SocketChannel
channel
=
sChannel
.
accept
();
channel
.
configureBlocking
(
false
);
channel
.
configureBlocking
(
false
);
Socket
socket
=
channel
.
socket
();
Socket
socket
=
channel
.
socket
();
SocketAddress
addr
=
socket
.
getRemoteSocketAddress
();
SocketAddress
addr
=
socket
.
getRemoteSocketAddress
();
System
.
out
.
println
(
"Accepted new client from:"
+
addr
);
System
.
out
.
println
(
"Accepted new client from:"
+
addr
);
clients
.
put
(
channel
,
new
Client
(
channel
));
clients
.
put
(
channel
,
new
Client
(
channel
));
channel
.
register
(
selector
,
SelectionKey
.
OP_READ
);
channel
.
register
(
selector
,
SelectionKey
.
OP_READ
);
}
}
private
void
read
(
SelectionKey
key
)
throws
IOException
{
private
void
read
(
SelectionKey
key
)
throws
IOException
{
SocketChannel
channel
=
(
SocketChannel
)
key
.
channel
();
SocketChannel
channel
=
(
SocketChannel
)
key
.
channel
();
ByteBuffer
buf
=
ByteBuffer
.
allocate
(
1024
);
ByteBuffer
buf
=
ByteBuffer
.
allocate
(
1024
);
int
n
=
channel
.
read
(
buf
);
int
n
=
channel
.
read
(
buf
);
if
(
n
==
-
1
)
{
if
(
n
==
-
1
)
{
clients
.
get
(
channel
).
offline
();
clients
.
get
(
channel
).
offline
();
clients
.
remove
(
channel
);
clients
.
remove
(
channel
);
channel
.
close
();
channel
.
close
();
key
.
cancel
();
key
.
cancel
();
return
;
return
;
}
}
byte
[]
data
=
new
byte
[
n
];
byte
[]
data
=
new
byte
[
n
];
System
.
arraycopy
(
buf
.
array
(),
0
,
data
,
0
,
n
);
System
.
arraycopy
(
buf
.
array
(),
0
,
data
,
0
,
n
);
clients
.
get
(
channel
).
onMsg
(
data
);
clients
.
get
(
channel
).
onMsg
(
data
);
}
}
public
static
void
test_libademco
()
{
public
static
void
test_libademco
()
{
// test parse
// test parse
{
{
System
.
out
.
println
(
"testing parse..."
);
System
.
out
.
println
(
"testing parse..."
);
String
data
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
String
data
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
System
.
out
.
println
(
"using data="
+
data
);
System
.
out
.
println
(
"using data="
+
data
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
data
.
getBytes
(),
data
.
length
(),
pkt
,
cb
);
AdemcoParseError
err
=
new
AdemcoParseError
();
assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
data
.
getBytes
(),
data
.
length
(),
pkt
,
cb
,
err
);
assert
(
libademco
.
size_tp_value
(
cb
)
==
data
.
length
());
assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
System
.
out
.
println
(
"parse result="
+
res
+
",cb_commited="
+
libademco
.
size_tp_value
(
cb
));
assert
(
libademco
.
size_tp_value
(
cb
)
==
data
.
length
());
libademco
.
delete_size_tp
(
cb
);
System
.
out
.
println
(
"parse result="
+
res
+
",cb_commited="
+
libademco
.
size_tp_value
(
cb
));
}
libademco
.
delete_size_tp
(
cb
);
}
// test pack
{
// test pack
System
.
out
.
println
(
"testing pack..."
);
{
System
.
out
.
println
(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0"
);
System
.
out
.
println
(
"testing pack..."
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0"
);
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
null
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
null
);
}
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
// test pack with xdata
{
// test pack with xdata
System
.
out
.
println
(
"testing pack with xdata..."
);
{
System
.
out
.
println
(
System
.
out
.
println
(
"testing pack with xdata..."
);
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456"
);
System
.
out
.
println
(
AdemcoXDataSegment
xdata
=
new
AdemcoXDataSegment
();
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456"
);
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataSegment
xdata
=
new
AdemcoXDataSegment
();
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
"123456"
.
getBytes
(),
6
);
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
"123456"
.
getBytes
(),
6
);
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
xdata
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
xdata
);
}
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
// test with hex xdata
{
// test with hex xdata
System
.
out
.
println
(
"testing pack with hex xdata..."
);
{
System
.
out
.
println
(
System
.
out
.
println
(
"testing pack with hex xdata..."
);
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76"
);
System
.
out
.
println
(
byte
[]
xdatacontent
=
new
byte
[
5
];
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76"
);
xdatacontent
[
0
]
=
(
byte
)
0xEB
;
byte
[]
xdatacontent
=
new
byte
[
5
];
xdatacontent
[
1
]
=
(
byte
)
0xBA
;
xdatacontent
[
0
]
=
(
byte
)
0xEB
;
xdatacontent
[
2
]
=
(
byte
)
0x3F
;
xdatacontent
[
1
]
=
(
byte
)
0xBA
;
xdatacontent
[
3
]
=
(
byte
)
0xA1
;
xdatacontent
[
2
]
=
(
byte
)
0x3F
;
xdatacontent
[
4
]
=
(
byte
)
0x76
;
xdatacontent
[
3
]
=
(
byte
)
0xA1
;
AdemcoXDataSegment
xdata
=
new
AdemcoXDataSegment
();
xdatacontent
[
4
]
=
(
byte
)
0x76
;
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataSegment
xdata
=
new
AdemcoXDataSegment
();
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
xdatacontent
,
5
);
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
xdatacontent
,
5
);
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
xdata
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
1234
,
"861234567890"
,
666666
l
,
AdemcoEvent
.
EVENT_ARM
,
0
l
,
0
l
,
xdata
);
}
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
// test pack ack
{
// test pack ack
System
.
out
.
println
(
"testing pack ack..."
);
{
System
.
out
.
println
(
"using seq=1234, acct=861234567890"
);
System
.
out
.
println
(
"testing pack ack..."
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"using seq=1234, acct=861234567890"
);
libademco
.
ademcoMakeAckPacket2
(
pkt
,
1234
,
"861234567890"
,
0
l
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeAckPacket2
(
pkt
,
1234
,
"861234567890"
,
0
l
);
}
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
// test pack ack without acct
{
// test pack ack without acct
System
.
out
.
println
(
"testing pack ack without acct..."
);
{
System
.
out
.
println
(
"using seq=1234, acct=\"\" ademco_id=666666"
);
System
.
out
.
println
(
"testing pack ack without acct..."
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"using seq=1234, acct=\"\" ademco_id=666666"
);
libademco
.
ademcoMakeAckPacket2
(
pkt
,
1234
,
""
,
666666
l
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeAckPacket2
(
pkt
,
1234
,
""
,
666666
l
);
}
System
.
out
.
println
(
"data="
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
}
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
JavaDemo
.
test_libademco
();
public
static
void
main
(
String
[]
args
)
throws
Exception
{
int
port
=
12345
;
JavaDemo
.
test_libademco
();
if
(
args
.
length
>
0
)
{
int
port
=
12345
;
port
=
Integer
.
parseInt
(
args
[
0
]);
if
(
args
.
length
>
0
)
{
}
port
=
Integer
.
parseInt
(
args
[
0
]);
}
// new JavaDemo("localhost", port).start();
new
JavaDemo
(
"0.0.0.0"
,
port
).
start
();
// new JavaDemo("localhost", port).start();
}
new
JavaDemo
(
"0.0.0.0"
,
port
).
start
();
}
public
class
Client
{
SocketChannel
channel
;
public
class
Client
{
byte
[]
buf
=
new
byte
[
0
];
SocketChannel
channel
;
AdemcoPacket
pkt
=
new
AdemcoPacket
();
byte
[]
buf
=
new
byte
[
0
];
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
HbMachineType
type
=
HbMachineType
.
HMT_INVALID
;
AdemcoParseError
err
=
new
AdemcoParseError
();
HbMachineStatus
status
=
HbMachineStatus
.
HMS_INVALID
;
SWIGTYPE_p_size_t
cb
=
libademco
.
new_size_tp
();
int
seq
=
0
;
HbMachineType
type
=
HbMachineType
.
HMT_INVALID
;
long
ademco_id
=
0
;
HbMachineStatus
status
=
HbMachineStatus
.
HMS_INVALID
;
String
acct
=
""
;
int
seq
=
0
;
long
lastTimeStatusChange
=
0
;
long
ademco_id
=
0
;
String
acct
=
""
;
public
Client
(
SocketChannel
channel
)
{
long
lastTimeStatusChange
=
0
;
this
.
channel
=
channel
;
}
public
Client
(
SocketChannel
channel
)
{
this
.
channel
=
channel
;
public
void
offline
()
{
}
System
.
out
.
println
(
id
()
+
" is offline"
);
libademco
.
delete_size_tp
(
cb
);
public
void
offline
()
{
}
System
.
out
.
println
(
id
()
+
" is offline"
);
libademco
.
delete_size_tp
(
cb
);
public
void
onMsg
(
byte
[]
data
)
throws
IOException
{
}
buf
=
append
(
buf
,
data
);
// System.out.println(printable_bytes(buf));
public
void
onMsg
(
byte
[]
data
)
throws
IOException
{
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buf
,
buf
.
length
,
pkt
,
cb
);
buf
=
append
(
buf
,
data
);
System
.
out
.
println
(
res
+
", "
+
libademco
.
size_tp_value
(
cb
));
// System.out.println(printable_bytes(buf));
switch
(
res
)
{
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buf
,
buf
.
length
,
pkt
,
cb
,
err
);
case
RESULT_OK:
System
.
out
.
println
(
res
+
", "
+
libademco
.
size_tp_value
(
cb
));
buf
=
trim
(
buf
,
(
int
)
libademco
.
size_tp_value
(
cb
));
switch
(
res
)
{
handleMsg
();
case
RESULT_OK:
break
;
buf
=
trim
(
buf
,
(
int
)
libademco
.
size_tp_value
(
cb
));
case
RESULT_NOT_ENOUGH:
handleMsg
();
break
;
break
;
case
RESULT_ERROR:
case
RESULT_NOT_ENOUGH:
buf
=
new
byte
[
0
];
break
;
break
;
case
RESULT_ERROR:
}
buf
=
new
byte
[
0
];
}
break
;
}
private
byte
[]
getRawWithLen
()
{
}
byte
[]
b
=
new
byte
[(
int
)
pkt
.
getRaw_len
()];
System
.
arraycopy
(
pkt
.
getRaw
(),
0
,
b
,
0
,
(
int
)
pkt
.
getRaw_len
());
private
byte
[]
getRawWithLen
()
{
return
b
;
byte
[]
b
=
new
byte
[(
int
)
pkt
.
getRaw_len
()];
}
System
.
arraycopy
(
pkt
.
getRaw
(),
0
,
b
,
0
,
(
int
)
pkt
.
getRaw_len
());
return
b
;
private
String
id
()
{
}
String
str
=
"Client "
+
channel
.
socket
().
getRemoteSocketAddress
();
if
(!
acct
.
isEmpty
())
{
private
String
id
()
{
str
+=
" acct="
+
acct
;
String
str
=
"Client "
+
channel
.
socket
().
getRemoteSocketAddress
();
}
if
(!
acct
.
isEmpty
())
{
if
(
ademco_id
!=
0
)
{
str
+=
" acct="
+
acct
;
str
+=
" ademco_id="
+
ademco_id
;
}
}
if
(
ademco_id
!=
0
)
{
return
str
;
str
+=
" ademco_id="
+
ademco_id
;
}
}
return
str
;
private
int
nextSeq
()
{
}
seq
++;
if
(
seq
==
10000
)
{
private
int
nextSeq
()
{
seq
=
1
;
seq
++;
}
if
(
seq
==
10000
)
{
return
seq
;
seq
=
1
;
}
}
return
seq
;
private
void
handleMsg
()
throws
IOException
{
}
System
.
out
.
println
(
id
()
+
" R:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
switch
(
pkt
.
getId
())
{
private
void
handleMsg
()
throws
IOException
{
case
AID_NULL:
System
.
out
.
println
(
id
()
+
" R:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
acct
=
pkt
.
getAcct
();
switch
(
pkt
.
getId
())
{
replyAck
();
case
AID_NULL:
break
;
acct
=
pkt
.
getAcct
();
replyAck
();
case
AID_ACK:
break
;
break
;
case
AID_ACK:
case
AID_HB:
break
;
case
AID_ADM_CID:
acct
=
pkt
.
getAcct
();
case
AID_HB:
ademco_id
=
pkt
.
getData
().
getAdemcoId
();
case
AID_ADM_CID:
AdemcoEvent
event
=
pkt
.
getData
().
getAdemcoEvent
();
acct
=
pkt
.
getAcct
();
System
.
out
.
println
(
id
()
+
" event="
+
libademco
.
ademcoEventToString
(
event
)
+
" zone="
ademco_id
=
pkt
.
getData
().
getAdemcoId
();
+
pkt
.
getData
().
getZone
());
AdemcoEvent
event
=
pkt
.
getData
().
getAdemcoEvent
();
if
(
libademco
.
ademcoIsMachineStatusEvent
(
event
)
!=
0
)
{
System
.
out
.
println
(
id
()
+
" event="
+
libademco
.
ademcoEventToString
(
event
)
+
" zone="
status
=
libademco
.
hbMachineStatusFromAdemcoEvent
(
event
);
+
pkt
.
getData
().
getZone
());
// 演示如何进行布撤防,真实项目里可以删改本段
if
(
libademco
.
ademcoIsMachineStatusEvent
(
event
)
!=
0
)
{
long
now
=
System
.
currentTimeMillis
();
status
=
libademco
.
hbMachineStatusFromAdemcoEvent
(
event
);
if
(
now
-
lastTimeStatusChange
>
5000
)
{
// 演示如何进行布撤防,真实项目里可以删改本段
lastTimeStatusChange
=
now
;
long
now
=
System
.
currentTimeMillis
();
if
(
status
==
HbMachineStatus
.
HMS_ARM
)
{
if
(
now
-
lastTimeStatusChange
>
5000
)
{
disarm
(
"123456"
);
lastTimeStatusChange
=
now
;
}
else
{
if
(
status
==
HbMachineStatus
.
HMS_ARM
)
{
arm
();
disarm
(
"123456"
);
}
}
else
{
}
arm
();
}
}
if
(
libademco
.
ademcoIsMachineTypeEvent
(
event
)
!=
0
)
{
}
type
=
libademco
.
hbMachineTypeFromAdemcoEvent
(
event
);
}
}
if
(
libademco
.
ademcoIsMachineTypeEvent
(
event
)
!=
0
)
{
replyAck
();
type
=
libademco
.
hbMachineTypeFromAdemcoEvent
(
event
);
if
(
type
==
HbMachineType
.
HMT_INVALID
&&
!
acct
.
isEmpty
()
&&
ademco_id
!=
0
)
{
}
askType
();
replyAck
();
}
if
(
type
==
HbMachineType
.
HMT_INVALID
&&
!
acct
.
isEmpty
()
&&
ademco_id
!=
0
)
{
break
;
askType
();
}
}
}
break
;
}
private
void
replyAck
()
throws
IOException
{
}
libademco
.
ademcoMakeAckPacket2
(
pkt
,
pkt
.
getSeq
(),
pkt
.
getAcct
(),
0
l
);
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
private
void
replyAck
()
throws
IOException
{
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeAckPacket2
(
pkt
,
pkt
.
getSeq
(),
pkt
.
getAcct
(),
0
l
);
}
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
private
void
askType
()
throws
IOException
{
}
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_WHAT_IS_YOUR_TYPE
,
0L
,
0L
,
null
);
private
void
askType
()
throws
IOException
{
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_WHAT_IS_YOUR_TYPE
,
0L
,
0L
,
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
null
);
}
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
private
void
arm
()
throws
IOException
{
}
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_ARM
,
0L
,
0L
,
null
);
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
private
void
arm
()
throws
IOException
{
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_ARM
,
0L
,
0L
,
null
);
}
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
private
void
disarm
(
String
pwd
)
throws
IOException
{
}
AdemcoXDataSegment
xdata
=
null
;
if
(
pwd
!=
null
&&
!
pwd
.
isEmpty
())
{
private
void
disarm
(
String
pwd
)
throws
IOException
{
xdata
=
new
AdemcoXDataSegment
();
AdemcoXDataSegment
xdata
=
null
;
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
if
(
pwd
!=
null
&&
!
pwd
.
isEmpty
())
{
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
pwd
.
getBytes
(),
pwd
.
length
());
xdata
=
new
AdemcoXDataSegment
();
}
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_DISARM
,
0L
,
0L
,
xdata
);
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
pwd
.
getBytes
(),
pwd
.
length
());
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
}
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
libademco
.
ademcoMakeHbPacket2
(
pkt
,
nextSeq
(),
acct
,
ademco_id
,
AdemcoEvent
.
EVENT_DISARM
,
0L
,
0L
,
xdata
);
}
channel
.
write
(
ByteBuffer
.
wrap
(
getRawWithLen
()));
}
System
.
out
.
println
(
id
()
+
" S:"
+
printable_bytes
(
pkt
.
getRaw
(),
pkt
.
getRaw_len
()));
}
public
static
String
printable_bytes
(
byte
[]
b
)
{
}
return
printable_bytes
(
b
,
b
.
length
);
}
public
static
String
printable_bytes
(
byte
[]
b
)
{
return
printable_bytes
(
b
,
b
.
length
);
public
static
String
printable_bytes
(
byte
[]
b
,
long
length
)
{
}
String
HEX_STRING
=
"0123456789ABCDEF"
;
String
s
=
""
;
public
static
String
printable_bytes
(
byte
[]
b
,
long
length
)
{
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
String
HEX_STRING
=
"0123456789ABCDEF"
;
byte
c
=
b
[
i
];
String
s
=
""
;
if
(
32
<=
c
&&
c
<=
127
)
{
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
s
+=
(
char
)
c
;
byte
c
=
b
[
i
];
}
else
{
if
(
32
<=
c
&&
c
<=
127
)
{
s
+=
"\\x"
+
HEX_STRING
.
charAt
((
b
[
i
]
>>>
4
)
&
0x0F
);
s
+=
(
char
)
c
;
s
+=
HEX_STRING
.
charAt
(
b
[
i
]
&
0x0F
);
}
else
{
}
s
+=
"\\x"
+
HEX_STRING
.
charAt
((
b
[
i
]
>>>
4
)
&
0x0F
);
}
s
+=
HEX_STRING
.
charAt
(
b
[
i
]
&
0x0F
);
return
s
;
}
}
}
return
s
;
public
static
String
printable_bytes
(
char
[]
b
)
{
}
String
HEX_STRING
=
"0123456789ABCDEF"
;
String
s
=
""
;
public
static
String
printable_bytes
(
char
[]
b
)
{
for
(
int
i
=
0
;
i
<
b
.
length
;
i
++)
{
String
HEX_STRING
=
"0123456789ABCDEF"
;
int
c
=
b
[
i
]
&
0xFF
;
String
s
=
""
;
if
(
32
<=
c
&&
c
<=
127
)
{
for
(
int
i
=
0
;
i
<
b
.
length
;
i
++)
{
s
+=
(
char
)
c
;
int
c
=
b
[
i
]
&
0xFF
;
}
else
{
if
(
32
<=
c
&&
c
<=
127
)
{
s
+=
"\\x"
+
HEX_STRING
.
charAt
(
c
>>>
4
);
s
+=
(
char
)
c
;
s
+=
HEX_STRING
.
charAt
(
c
&
0x0F
);
}
else
{
}
s
+=
"\\x"
+
HEX_STRING
.
charAt
(
c
>>>
4
);
}
s
+=
HEX_STRING
.
charAt
(
c
&
0x0F
);
return
s
;
}
}
}
return
s
;
public
static
String
printable_bytes
(
String
b
)
{
}
String
HEX_STRING
=
"0123456789ABCDEF"
;
String
s
=
""
;
public
static
String
printable_bytes
(
String
b
)
{
for
(
int
i
=
0
;
i
<
b
.
length
();
i
++)
{
String
HEX_STRING
=
"0123456789ABCDEF"
;
char
c
=
b
.
charAt
(
i
);
String
s
=
""
;
if
(
32
<=
c
&&
c
<=
127
)
{
for
(
int
i
=
0
;
i
<
b
.
length
();
i
++)
{
s
+=
(
char
)
c
;
char
c
=
b
.
charAt
(
i
);
}
else
{
if
(
32
<=
c
&&
c
<=
127
)
{
s
+=
"\\x"
+
HEX_STRING
.
charAt
(
c
>>>
4
);
s
+=
(
char
)
c
;
s
+=
HEX_STRING
.
charAt
(
c
&
0x0F
);
}
else
{
}
s
+=
"\\x"
+
HEX_STRING
.
charAt
(
c
>>>
4
);
}
s
+=
HEX_STRING
.
charAt
(
c
&
0x0F
);
return
s
;
}
}
}
return
s
;
public
static
char
[]
append
(
char
[]
origin
,
char
[]
buf
)
{
}
char
[]
dst
=
new
char
[
origin
.
length
+
buf
.
length
];
System
.
arraycopy
(
origin
,
0
,
dst
,
0
,
origin
.
length
);
public
static
char
[]
append
(
char
[]
origin
,
char
[]
buf
)
{
System
.
arraycopy
(
buf
,
0
,
dst
,
origin
.
length
,
buf
.
length
);
char
[]
dst
=
new
char
[
origin
.
length
+
buf
.
length
];
return
dst
;
System
.
arraycopy
(
origin
,
0
,
dst
,
0
,
origin
.
length
);
}
System
.
arraycopy
(
buf
,
0
,
dst
,
origin
.
length
,
buf
.
length
);
return
dst
;
public
static
byte
[]
append
(
byte
[]
origin
,
byte
[]
buf
)
{
}
byte
[]
dst
=
new
byte
[
origin
.
length
+
buf
.
length
];
System
.
arraycopy
(
origin
,
0
,
dst
,
0
,
origin
.
length
);
public
static
byte
[]
append
(
byte
[]
origin
,
byte
[]
buf
)
{
System
.
arraycopy
(
buf
,
0
,
dst
,
origin
.
length
,
buf
.
length
);
byte
[]
dst
=
new
byte
[
origin
.
length
+
buf
.
length
];
return
dst
;
System
.
arraycopy
(
origin
,
0
,
dst
,
0
,
origin
.
length
);
}
System
.
arraycopy
(
buf
,
0
,
dst
,
origin
.
length
,
buf
.
length
);
return
dst
;
public
byte
[]
trim
(
byte
[]
origin
,
int
pos
)
{
}
byte
[]
dst
=
new
byte
[
origin
.
length
-
pos
];
System
.
arraycopy
(
origin
,
pos
,
dst
,
0
,
origin
.
length
-
pos
);
public
byte
[]
trim
(
byte
[]
origin
,
int
pos
)
{
return
dst
;
byte
[]
dst
=
new
byte
[
origin
.
length
-
pos
];
}
System
.
arraycopy
(
origin
,
pos
,
dst
,
0
,
origin
.
length
-
pos
);
return
dst
;
public
static
byte
[]
c2b
(
char
[]
arr
)
{
}
byte
[]
b
=
new
byte
[
arr
.
length
];
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
public
static
byte
[]
c2b
(
char
[]
arr
)
{
b
[
i
]
=
(
byte
)
arr
[
i
];
byte
[]
b
=
new
byte
[
arr
.
length
];
}
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
return
b
;
b
[
i
]
=
(
byte
)
arr
[
i
];
}
}
return
b
;
public
static
char
[]
b2c
(
byte
[]
arr
)
{
}
char
[]
b
=
new
char
[
arr
.
length
];
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
public
static
char
[]
b2c
(
byte
[]
arr
)
{
b
[
i
]
=
(
char
)
arr
[
i
];
char
[]
b
=
new
char
[
arr
.
length
];
}
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
return
b
;
b
[
i
]
=
(
char
)
arr
[
i
];
}
}
}
return
b
;
}
}
swig/nodejs-demo.js
View file @
2e893557
...
@@ -12,7 +12,7 @@ function test_parse() {
...
@@ -12,7 +12,7 @@ function test_parse() {
var
str
=
"
\n
C5C30053
\"
HENG-BO
\"
0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019
\
r"
;
var
str
=
"
\n
C5C30053
\"
HENG-BO
\"
0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019
\
r"
;
var
cb
=
libademco
.
new_size_tp
();
var
cb
=
libademco
.
new_size_tp
();
var
pkt
=
new
libademco
.
AdemcoPacket
();
var
pkt
=
new
libademco
.
AdemcoPacket
();
var
res
=
libademco
.
ademcoPacketParse
(
str
,
str
.
length
,
pkt
,
cb
);
var
res
=
libademco
.
ademcoPacketParse
(
str
,
str
.
length
,
pkt
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
str
.
length
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
str
.
length
);
assert
.
strictEqual
(
pkt
.
crc
,
0xC5C3
);
assert
.
strictEqual
(
pkt
.
crc
,
0xC5C3
);
...
@@ -37,7 +37,7 @@ function test_pack() {
...
@@ -37,7 +37,7 @@ function test_pack() {
console
.
log
(
"test parse packed data"
);
console
.
log
(
"test parse packed data"
);
var
pkt2
=
new
libademco
.
AdemcoPacket
();
var
pkt2
=
new
libademco
.
AdemcoPacket
();
var
cb
=
libademco
.
new_size_tp
();
var
cb
=
libademco
.
new_size_tp
();
var
res
=
libademco
.
ademcoPacketParse
(
pkt
.
raw
,
pkt
.
raw_len
,
pkt2
,
cb
);
var
res
=
libademco
.
ademcoPacketParse
(
pkt
.
raw
,
pkt
.
raw_len
,
pkt2
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
pkt
.
raw_len
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
pkt
.
raw_len
);
assert
.
strictEqual
(
pkt2
.
id
,
libademco
.
AID_HB
);
assert
.
strictEqual
(
pkt2
.
id
,
libademco
.
AID_HB
);
...
@@ -58,6 +58,7 @@ class AlarmHost {
...
@@ -58,6 +58,7 @@ class AlarmHost {
this
.
buf
=
null
;
this
.
buf
=
null
;
this
.
inpkt
=
new
libademco
.
AdemcoPacket
();
this
.
inpkt
=
new
libademco
.
AdemcoPacket
();
this
.
outpkt
=
new
libademco
.
AdemcoPacket
();
this
.
outpkt
=
new
libademco
.
AdemcoPacket
();
this
.
parseErr
=
new
libademco
.
AdemcoParseError
();
this
.
cb
=
libademco
.
new_size_tp
();
this
.
cb
=
libademco
.
new_size_tp
();
this
.
ademcoId
=
0
;
this
.
ademcoId
=
0
;
this
.
acct
=
''
;
this
.
acct
=
''
;
...
@@ -68,14 +69,15 @@ class AlarmHost {
...
@@ -68,14 +69,15 @@ class AlarmHost {
chunk
=
Buffer
.
concat
([
this
.
buf
,
chunk
]);
chunk
=
Buffer
.
concat
([
this
.
buf
,
chunk
]);
}
}
let
res
=
libademco
.
ademcoPacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
);
let
res
=
libademco
.
ademcoPacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
while
(
res
===
libademco
.
RESULT_OK
)
{
while
(
res
===
libademco
.
RESULT_OK
)
{
chunk
=
chunk
.
slice
(
libademco
.
size_tp_value
(
this
.
cb
));
chunk
=
chunk
.
slice
(
libademco
.
size_tp_value
(
this
.
cb
));
this
.
handleMsg
();
this
.
handleMsg
();
res
=
libademco
.
ademcoPacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
);
res
=
libademco
.
ademcoPacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
}
}
if
(
res
===
libademco
.
RESULT_ERROR
)
{
if
(
res
===
libademco
.
RESULT_ERROR
)
{
console
.
log
(
'parse error at line=%d, msg=%s'
,
this
.
parseErr
.
line
,
this
.
parseErr
.
msg
);
chunk
=
null
;
chunk
=
null
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment