· 7 years ago · Jan 18, 2018, 07:08 PM
1process.title = 'prancer_sensorServer';
2
3var floorPort = 6000;
4var floorIP = '192.168.11.2';
5var pollBoardPacket = Buffer.from("55d50902", "hex");
6var sendToPcPacket = Buffer.from("55d50905000000004000", "hex");
7
8var net = require('net');
9var winston = require('winston');
10var WebSocketClient = require('websocket').client;
11
12var clientWS = new WebSocketClient();
13clientWS.connect('ws://localhost:1337/');
14// var clientWS = new WebSocketClient('ws://localhost:1337/', 'echo-protocol');
15var socketOutput = "yassssssssssssssssssss";
16
17clientWS.on('connectFailed', function(error) {
18 console.log('websocket connection error: ' + error.toString());
19});
20
21clientWS.on('connect', function(connection) {
22 console.log('webSocket client connected');
23 connection.on('error', function(error) {
24 console.log("connection error: " + error.toString());
25 });
26 connection.on('close', function() {
27 console.log('echo-protocol connection closed');
28 });
29 connection.on('message', function(message) {
30 if (message.type === 'utf8') {
31 }
32 });
33
34 function sendData() {
35 if (connection.connected) {
36 connection.sendUTF(socketOutput);
37 setTimeout(sendData, 32);
38 console.log('sendData()');
39 }
40 }
41 sendData();
42});
43
44
45
46var handshaking = false;
47var idleTicks = 0;
48//on the first handshake we don't have the same bytes
49var firstRun = true;
50var doneReadingLastSensorData = false;
51
52//idleticker counting up in case we don't receive data from the processor box
53//the box seems to stop short of sending a full 16 packet frame occasionally
54//so we manually retrigger it when that happens.
55function idleTicker() {
56 idleTicks += 1;
57 console.log('idleTicker incremented to ' + idleTicks);
58
59 if(idleTicks >= 3) {
60 client.write(otherStartupPacket);
61 idleTicks = 0;
62 }
63}
64
65function sleep(millis) {
66 var start = new Date().getTime();
67 for(var i = 0; i< 1e7; i++) {
68 if((new Date().getTime() - start) > millis) {
69 break;
70 }
71 }
72}
73
74function instructToPollAndStoreSensorData() {
75 client.write(pollBoardPacket);
76 console.log('instructed processor to poll sensor data');
77 sensorDataPolledButNotConfirmed = true;
78
79};
80
81function isSensorDataReadyToSend(data) {
82 var sensorDataReadyReply = Buffer.from("56d50902", "hex");
83 if(data == sensorDataReadyReply) {
84 console.log('sensor data ready to send TRUE');
85 return true;
86 } else {
87 console.log('sensor data ready to send FALSE');
88 return false;
89 }
90
91};
92
93function requestSendSensorDataToPc() {
94 client.write(sendToPcPacket);
95 console.log('requested send sensor data to pc')
96 sensorDataRequestedToBeSentButNotReceived = true;
97};
98
99function isDoneReadingLastSensorData(data) {
100 if(1 == 1){// we have either received the 16th packet or we have waited too long//) {
101 doneReadingLastSensorData = true;
102 console.log('done reading last sensor data ' + doneReadingLastSensorData);
103 return true;
104 } else {
105 doneReadingLastSensorData = false;
106 console.log('done reading last sensor data ' + doneReadingLastSensorData);
107 return false;
108 }
109
110 console.log('done reading last sensor data ' + doneReadingLastSensorData);
111 // return doneReadingLastSensorData;
112};
113
114
115//count the idle ticker up at a rate of roughly 20fps
116// setInterval(idleTicker, 50);
117
118var client = net.connect(floorPort, floorIP, function() {
119 console.log("connecting");
120 // client.write(pollBoardPacket);
121
122});
123
124client.on('error', function(ex) {
125 console.log("handled error");
126 console.log(ex);
127});
128
129client.on('connect', function(){
130 console.log("connected to socket");
131 // client.write(startupPacket);
132 instructToPollAndStoreSensorData();
133 handshaking = true;
134});
135
136client.on('data', function(data) {
137
138 if(isSensorDataReadyToSend(data)) {
139 requestSendSensorDataToPc();
140 }
141
142 if(isDoneReadingLastSensorData(data)) {
143 instructToPollAndStoreSensorData();
144 }
145
146 else {
147 console.log('we\'ve run out of options');
148 }
149
150})