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
8580363c
Commit
8580363c
authored
Jan 10, 2025
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update server_demo
parent
e4c9168c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
286 additions
and
266 deletions
+286
-266
server_demo.cpp
examples/server_demo/server_demo.cpp
+286
-266
No files found.
examples/server_demo/server_demo.cpp
View file @
8580363c
...
...
@@ -9,23 +9,24 @@
#define socklen_t int
#define close closesocket
#else // linux
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SOCKET int
#define INVALID_SOCKET -1
#endif
#define DISABLE_JLIB_LOG2
#include <string.h>
#include <mutex>
#include <thread>
#include <vector>
#include <mutex>
#include <string.h>
#include "../../ademco.h"
#include "../../ademco.h"
void
op_usage
()
{
printf
(
"Press A for Arm, D for Disarm, E for Emergency, Q for Quit
\n
"
);
...
...
@@ -110,7 +111,9 @@ int main(int argc, char** argv) {
printf
(
"Listening on %s:%d
\n
"
,
inet_ntoa
(
sAddrIn
.
sin_addr
),
ntohs
(
sAddrIn
.
sin_port
));
auto
do_accept
=
[
&
serverSock
]()
{
if
(
clientSock
!=
INVALID_SOCKET
)
{
return
;
}
if
(
clientSock
!=
INVALID_SOCKET
)
{
return
;
}
struct
sockaddr_in
sForeignAddrIn
;
socklen_t
nLength
=
sizeof
(
struct
sockaddr_in
);
...
...
@@ -118,7 +121,7 @@ int main(int argc, char** argv) {
fd_set
rfd
;
FD_ZERO
(
&
rfd
);
FD_SET
(
serverSock
,
&
rfd
);
timeval
timeout
=
{
1
,
0
};
timeval
timeout
=
{
1
,
0
};
int
nfds
=
select
((
int
)(
serverSock
+
1
),
&
rfd
,
(
fd_set
*
)
0
,
(
fd_set
*
)
0
,
&
timeout
);
printf
(
"do_accept, select ret=%d
\n
"
,
nfds
);
if
(
nfds
>
0
)
{
...
...
@@ -133,7 +136,8 @@ int main(int argc, char** argv) {
};
auto
do_handle
=
[]()
->
ademco_parse_result_t
{
ademco_packet_t
pkt
;
size_t
cb
=
0
;
ademco_packet_t
pkt
;
size_t
cb
=
0
;
ademco_parse_result_t
result
=
ademco_parse_packet
(
clientBuffer
.
buff
+
clientBuffer
.
rpos
,
clientBuffer
.
wpos
-
clientBuffer
.
rpos
,
&
pkt
,
...
...
@@ -141,11 +145,11 @@ int main(int argc, char** argv) {
nullptr
);
switch
(
result
)
{
case
ademco_parse_result_t
:
:
ADEMCO_PARSE_RESULT_OK
:
{
case
ademco_parse_result_t
:
:
ADEMCO_PARSE_RESULT_OK
:
{
clientBuffer
.
rpos
+=
cb
;
//printf("id=%s\n", ap.id_.data());
printf
(
"C:"
);
ademco_print
(
pkt
.
raw
,
pkt
.
raw_len
);
// printf("id=%s\n", ap.id_.data());
printf
(
"C:"
);
ademco_print
(
pkt
.
raw
,
pkt
.
raw_len
);
switch
(
pkt
.
id
)
{
case
AID_ACK
:
// success
...
...
@@ -155,26 +159,35 @@ int main(int argc, char** argv) {
{
char
ack
[
1024
];
size_t
len
=
ademco_make_ack_packet
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco_print
(
ack
,
len
);
printf
(
"S:"
);
ademco_print
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
break
;
}
case
AID_HB
:
// event report
case
AID_ADM_CID
:
{
case
AID_ADM_CID
:
{
clientAcct
=
pkt
.
acct
;
clientAdemcoId
=
pkt
.
dat
.
ademco_id
;
// handle event
// reply ack
{
char
ack
[
1024
];
int
len
=
ademco_make_ack_packet
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco_print
(
ack
,
len
);
printf
(
"S:"
);
ademco_print
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
}
// handle event
switch
(
pkt
.
dat
.
ademco_event
)
{
case
EVENT_BURGLAR
:
// 盗警
case
EVENT_FIRE
:
// 火警
// case ...
printf
(
"zone %03d triggered %s
\n
"
,
pkt
.
dat
.
zone
,
ademco_event_to_string
(
pkt
.
dat
.
ademco_event
));
break
;
}
break
;
}
...
...
@@ -201,7 +214,7 @@ int main(int argc, char** argv) {
auto
do_read
=
[
&
do_handle
]()
{
if
(
clientSock
==
INVALID_SOCKET
)
return
;
timeval
tv
=
{
0
,
1000000
};
timeval
tv
=
{
0
,
1000000
};
fd_set
fd_read
;
FD_ZERO
(
&
fd_read
);
FD_SET
(
clientSock
,
&
fd_read
);
...
...
@@ -211,7 +224,9 @@ int main(int argc, char** argv) {
}
int
bRead
=
FD_ISSET
(
clientSock
,
&
fd_read
);
if
(
!
bRead
)
{
return
;
}
if
(
!
bRead
)
{
return
;
}
char
*
temp
=
clientBuffer
.
buff
+
clientBuffer
.
wpos
;
size_t
dwLenToRead
=
BUFF_SIZE
-
clientBuffer
.
wpos
;
...
...
@@ -225,7 +240,8 @@ int main(int argc, char** argv) {
if
(
bytes_transfered
<=
0
)
{
printf
(
"Client %d offline
\n
"
,
(
int
)
clientSock
);
close
(
clientSock
);
clientSock
=
INVALID_SOCKET
;
close
(
clientSock
);
clientSock
=
INVALID_SOCKET
;
clientBuffer
.
clear
();
}
else
{
clientBuffer
.
wpos
+=
bytes_transfered
;
...
...
@@ -242,13 +258,16 @@ int main(int argc, char** argv) {
if
(
clientBuffer
.
wpos
==
BUFF_SIZE
)
{
memmove
(
clientBuffer
.
buff
,
clientBuffer
.
buff
+
clientBuffer
.
rpos
,
bytes_not_commited
);
memset
(
clientBuffer
.
buff
+
bytes_not_commited
,
0
,
BUFF_SIZE
-
bytes_not_commited
);
clientBuffer
.
wpos
-=
clientBuffer
.
rpos
;
clientBuffer
.
rpos
=
0
;
clientBuffer
.
wpos
-=
clientBuffer
.
rpos
;
clientBuffer
.
rpos
=
0
;
result
=
do_handle
();
}
else
{
result
=
do_handle
();
}
if
(
result
==
ademco_parse_result_t
::
ADEMCO_PARSE_RESULT_NOT_ENOUGH
)
{
break
;
}
if
(
result
==
ademco_parse_result_t
::
ADEMCO_PARSE_RESULT_NOT_ENOUGH
)
{
break
;
}
}
}
};
...
...
@@ -269,14 +288,15 @@ int main(int argc, char** argv) {
ademco_xdata_t
xdata
;
ademco_make_xdata
(
&
xdata
,
ADEMCO_XDATA_LENGTH_FMT_TWO_HEX
,
ADEMCO_XDATA_TRANSFORM_AS_IS
,
pwd
,
6
);
int
len
=
ademco_make_hb_packet
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
&
xdata
);
printf
(
"S:"
);
ademco_print
(
buf
,
len
);
printf
(
"S:"
);
ademco_print
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
}
else
{
int
len
=
ademco_make_hb_packet
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
nullptr
);
printf
(
"S:"
);
ademco_print
(
buf
,
len
);
printf
(
"S:"
);
ademco_print
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
}
}
evntsWaiting4Send
.
clear
();
}
...
...
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