Commit 9713cdaf authored by captainwong's avatar captainwong

add comment for arm/disarm; format code

parent e156a459
......@@ -15,7 +15,7 @@ namespace CSharpDemo
{
class Program
{
static void Main(string[] args)
static void Main(string[] args)
{
// test parse
{
......@@ -36,7 +36,7 @@ namespace CSharpDemo
Debug.Assert(pkt.data.ademcoEvent == AdemcoEvent.EVENT_I_AM_WIRE_MACHINE);
Debug.Assert(pkt.data.gg == 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
......@@ -46,11 +46,11 @@ namespace CSharpDemo
uint len = libademco.ademcoMakeHbPacket(buff, 1024, 1, "861234567890", 666666, AdemcoEvent.EVENT_ARM, 0, 0, null);
Debug.Assert(len > 0);
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();
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);
Debug.Assert(res == AdemcoParseResult.RESULT_OK);
Debug.Assert(libademco.size_tp_value(cb) == len);
......@@ -84,34 +84,39 @@ namespace CSharpDemo
{
var listener = new TcpListener(IPAddress.Any, port);
listener.Start();
while(true){
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread thread = new Thread(new ParameterizedThreadStart(clientHandler));
thread.Start(client);
}
}catch(Exception e)
}
catch (Exception e)
{
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];
Array.ConstrainedCopy(origin, 0, dst, 0, origin.Length);
Array.ConstrainedCopy(buf, 0, dst, origin.Length, len);
return dst;
}
static byte[] eat(byte[] origin, int len){
if(origin.Length == len){return new byte[0];}
static byte[] eat(byte[] origin, int len)
{
if (origin.Length == len) { return new byte[0]; }
byte[] dst = new byte[origin.Length - len];
Array.ConstrainedCopy(origin, len, dst, 0, origin.Length - len);
return dst;
}
static ushort nextSeq(ushort seq){
if(++seq == 10000){ seq = 1;}
static ushort nextSeq(ushort seq)
{
if (++seq == 10000) { seq = 1; }
return seq;
}
......@@ -141,14 +146,16 @@ namespace CSharpDemo
{
break;
}
if(nread == 0){break;}
if (nread == 0) { break; }
buff = append(buff, msg, nread);
AdemcoParseResult res = AdemcoParseResult.RESULT_OK;
while(res == AdemcoParseResult.RESULT_OK){
AdemcoParseResult res = AdemcoParseResult.RESULT_OK;
while (res == AdemcoParseResult.RESULT_OK)
{
res = libademco.ademcoPacketParse(buff, (uint)buff.Length, pkt, cb);
switch(res){
case AdemcoParseResult.RESULT_OK:
switch (res)
{
case AdemcoParseResult.RESULT_OK:
Console.Write("C:"); libademco.ademcoPrint(buff, libademco.size_tp_value(cb));
buff = eat(buff, (int)libademco.size_tp_value(cb));
switch (pkt.id)
......@@ -161,18 +168,24 @@ namespace CSharpDemo
replyAck(stream, pkt.seq, pkt.acct);
acct = pkt.acct;
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);
}
if(libademco.ademcoIsMachineStatusEvent(pkt.data.ademcoEvent) != 0){
if (libademco.ademcoIsMachineStatusEvent(pkt.data.ademcoEvent) != 0)
{
status = libademco.hbMachineStatusFromAdemcoEvent(pkt.data.ademcoEvent);
}
// 示范布撤防的调用方式
if(++counter % 5 == 0){
if(status == HbMachineStatus.HMS_ARM){
// 演示如何进行布撤防,真实项目里可以删改本段
if (++counter % 5 == 0)
{
if (status == HbMachineStatus.HMS_ARM)
{
sendDisarm(stream, nextSeq(seq), acct, ademco_id, "123456");
}else{
}
else
{
sendArm(stream, nextSeq(seq), acct, ademco_id);
}
}
......@@ -190,7 +203,8 @@ namespace CSharpDemo
}
}
static void replyAck(NetworkStream stream, ushort seq, string acct){
static void replyAck(NetworkStream stream, ushort seq, string acct)
{
byte[] buff = new byte[1024];
uint len = libademco.ademcoMakeAckPacket(buff, 1024, seq, acct, 0);
Console.Write("S:");
......@@ -198,7 +212,8 @@ namespace CSharpDemo
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];
uint len = libademco.ademcoMakeHbPacket(buff, 1024, seq, acct, ademcoId, AdemcoEvent.EVENT_ARM, 0, 0, null);
Console.Write("S:");
......@@ -206,10 +221,12 @@ namespace CSharpDemo
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];
AdemcoXDataSegment xdata = null;
if(!string.IsNullOrEmpty(pwd)){
if (!string.IsNullOrEmpty(pwd))
{
xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, Encoding.ASCII.GetBytes(pwd), (uint)pwd.Length);
}
......
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
......@@ -15,7 +14,9 @@ public class JavaDemo {
try {
System.loadLibrary("ademco_java");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
System.err.println(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n"
+ e);
System.exit(1);
}
}
......@@ -24,12 +25,12 @@ public class JavaDemo {
private Map<SocketChannel, Client> clients;
private InetSocketAddress listenAddr;
public JavaDemo(String addr, int port) throws IOException{
public JavaDemo(String addr, int port) throws IOException {
listenAddr = new InetSocketAddress(addr, port);
clients = new HashMap<SocketChannel, Client>();
}
private void start() throws IOException{
private void start() throws IOException {
selector = Selector.open();
ServerSocketChannel channel = ServerSocketChannel.open();
channel.configureBlocking(false);
......@@ -37,21 +38,24 @@ public class JavaDemo {
channel.register(selector, SelectionKey.OP_ACCEPT);
System.out.println("Server started...");
while(true){
while (true) {
selector.select();
Iterator keys = selector.selectedKeys().iterator();
while(keys.hasNext()){
SelectionKey key = (SelectionKey)keys.next();
while (keys.hasNext()) {
SelectionKey key = (SelectionKey) keys.next();
keys.remove();
if(!key.isValid()) continue;
if(key.isAcceptable()) accept(key);
else if(key.isReadable()) read(key);
if (!key.isValid())
continue;
if (key.isAcceptable())
accept(key);
else if (key.isReadable())
read(key);
}
}
}
private void accept(SelectionKey key) throws IOException{
ServerSocketChannel sChannel = (ServerSocketChannel)key.channel();
private void accept(SelectionKey key) throws IOException {
ServerSocketChannel sChannel = (ServerSocketChannel) key.channel();
SocketChannel channel = sChannel.accept();
channel.configureBlocking(false);
Socket socket = channel.socket();
......@@ -61,11 +65,11 @@ public class JavaDemo {
channel.register(selector, SelectionKey.OP_READ);
}
private void read(SelectionKey key) throws IOException{
SocketChannel channel = (SocketChannel)key.channel();
private void read(SelectionKey key) throws IOException {
SocketChannel channel = (SocketChannel) key.channel();
ByteBuffer buf = ByteBuffer.allocate(1024);
int n = channel.read(buf);
if(n==-1){
if (n == -1) {
clients.get(channel).offline();
clients.remove(channel);
channel.close();
......@@ -78,7 +82,7 @@ public class JavaDemo {
clients.get(channel).onMsg(data);
}
public static void test_libademco(){
public static void test_libademco() {
// test parse
{
System.out.println("testing parse...");
......@@ -87,14 +91,14 @@ public class JavaDemo {
AdemcoPacket pkt = new AdemcoPacket();
SWIGTYPE_p_size_t cb = libademco.new_size_tp();
AdemcoParseResult res = libademco.ademcoPacketParse(data.getBytes(), data.length(), pkt, cb);
assert(res == AdemcoParseResult.RESULT_OK);
assert(libademco.size_tp_value(cb) == data.length());
assert (res == AdemcoParseResult.RESULT_OK);
assert (libademco.size_tp_value(cb) == data.length());
System.out.println("parse result=" + res + ",cb_commited=" + libademco.size_tp_value(cb));
libademco.delete_size_tp(cb);
}
// test pack
{
{
System.out.println("testing pack...");
System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0");
AdemcoPacket pkt = new AdemcoPacket();
......@@ -105,9 +109,11 @@ public class JavaDemo {
// test pack with xdata
{
System.out.println("testing pack with xdata...");
System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456");
System.out.println(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456");
AdemcoXDataSegment xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, "123456".getBytes(), 6);
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, "123456".getBytes(), 6);
AdemcoPacket pkt = new AdemcoPacket();
libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata);
System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
......@@ -116,15 +122,17 @@ public class JavaDemo {
// test with hex xdata
{
System.out.println("testing pack with hex xdata...");
System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76");
System.out.println(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76");
byte[] xdatacontent = new byte[5];
xdatacontent[0] = (byte)0xEB;
xdatacontent[1] = (byte)0xBA;
xdatacontent[2] = (byte)0x3F;
xdatacontent[3] = (byte)0xA1;
xdatacontent[4] = (byte)0x76;
xdatacontent[0] = (byte) 0xEB;
xdatacontent[1] = (byte) 0xBA;
xdatacontent[2] = (byte) 0x3F;
xdatacontent[3] = (byte) 0xA1;
xdatacontent[4] = (byte) 0x76;
AdemcoXDataSegment xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, xdatacontent, 5);
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, xdatacontent, 5);
AdemcoPacket pkt = new AdemcoPacket();
libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata);
System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
......@@ -150,14 +158,14 @@ public class JavaDemo {
}
public static void main(String[] args) throws Exception {
public static void main(String[] args) throws Exception {
JavaDemo.test_libademco();
int port = 12345;
if (args.length > 0){
if (args.length > 0) {
port = Integer.parseInt(args[0]);
}
//new JavaDemo("localhost", port).start();
// new JavaDemo("localhost", port).start();
new JavaDemo("0.0.0.0", port).start();
}
......@@ -173,23 +181,23 @@ public class JavaDemo {
String acct = "";
long lastTimeStatusChange = 0;
public Client(SocketChannel channel){
public Client(SocketChannel channel) {
this.channel = channel;
}
public void offline(){
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));
// System.out.println(printable_bytes(buf));
AdemcoParseResult res = libademco.ademcoPacketParse(buf, buf.length, pkt, cb);
System.out.println(res + ", " + libademco.size_tp_value(cb));
switch(res) {
switch (res) {
case RESULT_OK:
buf = trim(buf, (int)libademco.size_tp_value(cb));
buf = trim(buf, (int) libademco.size_tp_value(cb));
handleMsg();
break;
case RESULT_NOT_ENOUGH:
......@@ -200,26 +208,26 @@ public class JavaDemo {
}
}
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() {
byte[] b = new byte[(int) pkt.getRaw_len()];
System.arraycopy(pkt.getRaw(), 0, b, 0, (int) pkt.getRaw_len());
return b;
}
private String id(){
private String id() {
String str = "Client " + channel.socket().getRemoteSocketAddress();
if(!acct.isEmpty()){
if (!acct.isEmpty()) {
str += " acct=" + acct;
}
if(ademco_id != 0){
if (ademco_id != 0) {
str += " ademco_id=" + ademco_id;
}
return str;
}
private int nextSeq(){
private int nextSeq() {
seq++;
if(seq == 10000){
if (seq == 10000) {
seq = 1;
}
return seq;
......@@ -227,42 +235,43 @@ public class JavaDemo {
private void handleMsg() throws IOException {
System.out.println(id() + " R:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
switch(pkt.getId()){
switch (pkt.getId()) {
case AID_NULL:
acct = pkt.getAcct();
replyAck();
break;
case AID_ACK:
break;
case AID_HB:
case AID_ADM_CID:
acct = pkt.getAcct();
ademco_id = pkt.getData().getAdemcoId();
AdemcoEvent event = pkt.getData().getAdemcoEvent();
System.out.println(id() + " event=" + libademco.ademcoEventToString(event) + " zone=" + pkt.getData().getZone());
if(libademco.ademcoIsMachineStatusEvent(event) != 0){
System.out.println(id() + " event=" + libademco.ademcoEventToString(event) + " zone="
+ pkt.getData().getZone());
if (libademco.ademcoIsMachineStatusEvent(event) != 0) {
status = libademco.hbMachineStatusFromAdemcoEvent(event);
// test arm/disarm
// 演示如何进行布撤防,真实项目里可以删改本段
long now = System.currentTimeMillis();
if(now - lastTimeStatusChange > 5000){
if (now - lastTimeStatusChange > 5000) {
lastTimeStatusChange = now;
if(status == HbMachineStatus.HMS_ARM){
if (status == HbMachineStatus.HMS_ARM) {
disarm("123456");
}else{
} else {
arm();
}
}
}
if(libademco.ademcoIsMachineTypeEvent(event) != 0){
if (libademco.ademcoIsMachineTypeEvent(event) != 0) {
type = libademco.hbMachineTypeFromAdemcoEvent(event);
}
replyAck();
if(type == HbMachineType.HMT_INVALID && !acct.isEmpty() && ademco_id != 0){
if (type == HbMachineType.HMT_INVALID && !acct.isEmpty() && ademco_id != 0) {
askType();
}
break;
break;
}
}
......@@ -273,12 +282,13 @@ public class JavaDemo {
}
private void askType() throws IOException {
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_WHAT_IS_YOUR_TYPE, 0L, 0L, null);
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_WHAT_IS_YOUR_TYPE, 0L, 0L,
null);
channel.write(ByteBuffer.wrap(getRawWithLen()));
System.out.println(id() + " S:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
}
private void arm() throws IOException{
private void arm() throws IOException {
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()));
......@@ -286,9 +296,10 @@ public class JavaDemo {
private void disarm(String pwd) throws IOException {
AdemcoXDataSegment xdata = null;
if(pwd != null && !pwd.isEmpty()){
if (pwd != null && !pwd.isEmpty()) {
xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, pwd.getBytes(), pwd.length());
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, pwd.getBytes(), pwd.length());
}
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_DISARM, 0L, 0L, xdata);
channel.write(ByteBuffer.wrap(getRawWithLen()));
......@@ -296,18 +307,18 @@ public class JavaDemo {
}
}
public static String printable_bytes(byte[] b){
public static String printable_bytes(byte[] b) {
return printable_bytes(b, b.length);
}
public static String printable_bytes(byte[] b, long length){
public static String printable_bytes(byte[] b, long length) {
String HEX_STRING = "0123456789ABCDEF";
String s = "";
for(int i = 0; i < length; i++){
for (int i = 0; i < length; i++) {
byte c = b[i];
if(32 <= c && c <= 127){
s += (char)c;
}else{
if (32 <= c && c <= 127) {
s += (char) c;
} else {
s += "\\x" + HEX_STRING.charAt((b[i] >>> 4) & 0x0F);
s += HEX_STRING.charAt(b[i] & 0x0F);
}
......@@ -315,14 +326,14 @@ public class JavaDemo {
return s;
}
public static String printable_bytes(char[] b){
public static String printable_bytes(char[] b) {
String HEX_STRING = "0123456789ABCDEF";
String s = "";
for(int i = 0; i < b.length; i++){
for (int i = 0; i < b.length; i++) {
int c = b[i] & 0xFF;
if(32 <= c && c <= 127){
s += (char)c;
}else{
if (32 <= c && c <= 127) {
s += (char) c;
} else {
s += "\\x" + HEX_STRING.charAt(c >>> 4);
s += HEX_STRING.charAt(c & 0x0F);
}
......@@ -330,14 +341,14 @@ public class JavaDemo {
return s;
}
public static String printable_bytes(String b){
public static String printable_bytes(String b) {
String HEX_STRING = "0123456789ABCDEF";
String s = "";
for(int i = 0; i < b.length(); i++){
for (int i = 0; i < b.length(); i++) {
char c = b.charAt(i);
if(32 <= c && c <= 127){
s += (char)c;
}else{
if (32 <= c && c <= 127) {
s += (char) c;
} else {
s += "\\x" + HEX_STRING.charAt(c >>> 4);
s += HEX_STRING.charAt(c & 0x0F);
}
......@@ -345,38 +356,38 @@ public class JavaDemo {
return s;
}
public static char[] append(char[]origin, char[] buf){
public static char[] append(char[] origin, char[] buf) {
char[] dst = new char[origin.length + buf.length];
System.arraycopy(origin, 0, dst, 0, origin.length);
System.arraycopy(buf , 0, dst, origin.length, buf.length);
System.arraycopy(buf, 0, dst, origin.length, buf.length);
return dst;
}
public static byte[] append(byte[]origin, byte[] buf){
public static byte[] append(byte[] origin, byte[] buf) {
byte[] dst = new byte[origin.length + buf.length];
System.arraycopy(origin, 0, dst, 0, origin.length);
System.arraycopy(buf , 0, dst, origin.length, buf.length);
System.arraycopy(buf, 0, dst, origin.length, buf.length);
return dst;
}
public byte[] trim(byte[] origin, int pos){
public byte[] trim(byte[] origin, int pos) {
byte[] dst = new byte[origin.length - pos];
System.arraycopy(origin, pos, dst, 0, origin.length - pos);
return dst;
}
public static byte[] c2b(char[] arr){
public static byte[] c2b(char[] arr) {
byte[] b = new byte[arr.length];
for(int i = 0; i < arr.length; i++){
b[i] = (byte)arr[i];
for (int i = 0; i < arr.length; i++) {
b[i] = (byte) arr[i];
}
return b;
}
public static char[] b2c(byte[] arr){
public static char[] b2c(byte[] arr) {
char[] b = new char[arr.length];
for(int i = 0; i < arr.length; i++){
b[i] = (char)arr[i];
for (int i = 0; i < arr.length; i++) {
b[i] = (char) arr[i];
}
return b;
}
......
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