Commit aeac7bf6 authored by captainwong's avatar captainwong

update

parent fd3f2b36
...@@ -157,6 +157,16 @@ void handle_ademco_msg(Session* session, bufferevent* bev) ...@@ -157,6 +157,16 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
} }
char buf[1024]; char buf[1024];
auto output = bufferevent_get_output(bev); auto output = bufferevent_get_output(bev);
auto ack = [&]() {
AdemcoPacket pkt;
auto n = pkt.make_ack(buf, sizeof(buf), session->packet.seq_.value_, session->acct, session->ademco_id);
if (print_data) {
printf("T#%d C#%d send:%s\n", session->thread_id, session->id, pkt.toString().data());
}
evbuffer_add(output, buf, n);
};
switch (session->packet.id_.eid_) { switch (session->packet.id_.eid_) {
case AdemcoMsgId::id_ack: case AdemcoMsgId::id_ack:
/*if (load_test) { /*if (load_test) {
...@@ -175,6 +185,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev) ...@@ -175,6 +185,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
switch (session->packet.ademcoData_.ademco_event_) { switch (session->packet.ademcoData_.ademco_event_) {
case EVENT_WHAT_IS_YOUR_TYPE: case EVENT_WHAT_IS_YOUR_TYPE:
{ {
ack();
auto n = session->packet.make_hb(buf, sizeof(buf), auto n = session->packet.make_hb(buf, sizeof(buf),
session->packet.seq_.value_, session->acct, session->ademco_id, 0, session->packet.seq_.value_, session->acct, session->ademco_id, 0,
ademcoEventFromMachineType(session->type), 0); ademcoEventFromMachineType(session->type), 0);
...@@ -206,6 +217,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev) ...@@ -206,6 +217,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
} else if (0 == session->packet.ademcoData_.gg_) { } else if (0 == session->packet.ademcoData_.gg_) {
session->status = machineStatusFromAdemcoEvent(session->packet.ademcoData_.ademco_event_); session->status = machineStatusFromAdemcoEvent(session->packet.ademcoData_.ademco_event_);
} else { break; } } else { break; }
ack();
auto n = session->packet.make_hb(buf, sizeof(buf), auto n = session->packet.make_hb(buf, sizeof(buf),
session->packet.seq_.value_, session->acct, session->ademco_id, session->packet.seq_.value_, session->acct, session->ademco_id,
session->packet.ademcoData_.gg_, session->packet.ademcoData_.ademco_event_, session->packet.ademcoData_.zone_); session->packet.ademcoData_.gg_, session->packet.ademcoData_.ademco_event_, session->packet.ademcoData_.zone_);
...@@ -253,6 +265,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev) ...@@ -253,6 +265,7 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
} else if (0 == session->packet.ademcoData_.gg_) { } else if (0 == session->packet.ademcoData_.gg_) {
session->status = MachineStatus::Disarm; session->status = MachineStatus::Disarm;
} else { break; } } else { break; }
ack();
auto n = session->packet.make_hb(buf, sizeof(buf), auto n = session->packet.make_hb(buf, sizeof(buf),
session->packet.seq_.value_, session->acct, session->ademco_id, session->packet.seq_.value_, session->acct, session->ademco_id,
session->packet.ademcoData_.gg_, EVENT_DISARM, session->packet.ademcoData_.zone_); session->packet.ademcoData_.gg_, EVENT_DISARM, session->packet.ademcoData_.zone_);
...@@ -275,6 +288,17 @@ void handle_ademco_msg(Session* session, bufferevent* bev) ...@@ -275,6 +288,17 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
break; break;
} }
case EVENT_EMERGENCY:
{
ack();
auto n = session->packet.make_hb(buf, sizeof(buf),
session->packet.seq_.value_, session->acct, session->ademco_id, 0, EVENT_EMERGENCY, 0);
if (print_data) {
printf("T#%d C#%d send:%s\n", session->thread_id, session->id, session->packet.toString().data());
}
evbuffer_add(output, buf, n);
}
} }
} }
...@@ -638,7 +662,7 @@ void commandcb(evutil_socket_t, short, void* user_data) ...@@ -638,7 +662,7 @@ void commandcb(evutil_socket_t, short, void* user_data)
// context->packet.toString(ademco::detail::ToStringOption::ALL_CHAR_AS_HEX).data()); // context->packet.toString(ademco::detail::ToStringOption::ALL_CHAR_AS_HEX).data());
// } // }
//} else //} else
if (client->type == EVENT_I_AM_3_SECTION_MACHINE && (e == EVENT_ARM || e == EVENT_DISARM)) { if (client->type == MachineType::ThreeSection && (e == EVENT_ARM || e == EVENT_DISARM)) {
for (AdemcoGG gg = 1; gg <= 3; gg++) { for (AdemcoGG gg = 1; gg <= 3; gg++) {
n = client->packet.make_hb(buf, sizeof(buf), client->nextSeq(), client->acct, client->ademco_id, gg, e, 0); n = client->packet.make_hb(buf, sizeof(buf), client->nextSeq(), client->acct, client->ademco_id, gg, e, 0);
evbuffer_add(output, buf, n); evbuffer_add(output, buf, n);
......
...@@ -371,7 +371,7 @@ void handle_ademco_msg(ThreadContext* context, bufferevent* bev) ...@@ -371,7 +371,7 @@ void handle_ademco_msg(ThreadContext* context, bufferevent* bev)
break; break;
} }
} else if (ademco::isMachineStatusEvent(context->packet.ademcoData_.ademco_event_)) { } else if (ademco::isMachineStatusEvent(context->packet.ademcoData_.ademco_event_)) {
auto status = machienStatusFromAdemcoEvent(context->packet.ademcoData_.ademco_event_); auto status = machineStatusFromAdemcoEvent(context->packet.ademcoData_.ademco_event_);
if (context->packet.ademcoData_.gg_ == 0) { client.status = status; } if (context->packet.ademcoData_.gg_ == 0) { client.status = status; }
else if (context->packet.ademcoData_.gg_ == 1) { client.status1 = status; } else if (context->packet.ademcoData_.gg_ == 1) { client.status1 = status; }
else if (context->packet.ademcoData_.gg_ == 2) { client.status2 = status; } else if (context->packet.ademcoData_.gg_ == 2) { client.status2 = status; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment