Advertisement
monkk

vbvb

Feb 9th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. 'use strict';
  2.  
  3. let WebSocketClient = require('websocket').client;
  4.  
  5. let levers = {
  6. "01": "noVal",
  7. "02": "noVal",
  8. "03": "noVal",
  9. "12": "noVal",
  10. "13": "noVal",
  11. "23": "noVal"
  12. };
  13.  
  14. let singleLever = {
  15. "0": true,
  16. "1": true,
  17. "2": true,
  18. "3": true
  19. };
  20.  
  21. let allLeversAreSame = false;
  22. let firedPower = false;
  23.  
  24. let client = new WebSocketClient();
  25.  
  26. client.on('connectFailed', function (error) {
  27. console.log('Connect Error: ' + error.toString());
  28. });
  29.  
  30. client.on('connect', function (connection) {
  31.  
  32. connection.on('error', function (error) {
  33. console.log("Connection Error: " + error.toString());
  34. });
  35. connection.on('close', function () {
  36. console.log('echo-protocol Connection Closed');
  37. });
  38.  
  39. connection.on('message', function (message) {
  40.  
  41. var msgParsed = JSON.parse(message.utf8Data);
  42. console.log(message.utf8Data);
  43.  
  44. let receivedPull = msgParsed.stateId && [0, 1, 2, 3].includes(msgParsed.pulled);
  45. let receviedAnswer = msgParsed.stateId && msgParsed.action;
  46.  
  47. if (msgParsed.newState == "poweredOff") {
  48. console.log('SUCCESS!');
  49. connection.close();
  50. }
  51.  
  52. if (receivedPull && !allLeversAreSame) {
  53.  
  54. let leversArray = [0, 1, 2, 3];
  55. leversArray.splice(leversArray.indexOf(msgParsed.pulled), 1);
  56.  
  57. changeStateOfPairs(msgParsed.pulled);
  58. populatingLeversObj(msgParsed.stateId);
  59.  
  60. }
  61.  
  62. else if (receivedPull && allLeversAreSame) {
  63.  
  64. singleLever[msgParsed.pulled] = !singleLever[msgParsed.pulled];
  65. let countOfTurnedOffLevers = 0;
  66.  
  67. for (let property in singleLever) {
  68. if (singleLever.hasOwnProperty(property)) {
  69. if (singleLever[property] == false) {
  70. countOfTurnedOffLevers++;
  71. }
  72. }
  73. }
  74.  
  75. if (countOfTurnedOffLevers == 4) {
  76. let shutdownMessage = {"action": "powerOff", "stateId": msgParsed.stateId};
  77. connection.send(JSON.stringify(shutdownMessage));
  78. }
  79. }
  80.  
  81. if (receviedAnswer) {
  82. levers[String(msgParsed.lever1) + String(msgParsed.lever2)] = msgParsed.same;
  83. }
  84.  
  85. checkIfAllLeversAreSame(msgParsed.stateId);
  86.  
  87. });
  88.  
  89. /* отправляет Websocket запрос на сервер для проверки состояний пары рычагов */
  90. function sendCheckMessage(stateId, lever1, lever2) {
  91. if (connection.connected) {
  92. let checkMessage = {"action": "check", "lever1": lever1, "lever2": lever2, "stateId": stateId};
  93. console.log('sent: ' + JSON.stringify(checkMessage));
  94. connection.send(JSON.stringify(checkMessage));
  95. }
  96. }
  97.  
  98. /* Каждый раз при получения информации о том, какой рычаг был "дернут", необходимо поменять
  99. * значения всех необходимых пар
  100. * */
  101. function changeStateOfPairs(leverPulled) {
  102. for (let property in levers) {
  103. if (levers.hasOwnProperty(property)) {
  104. if (property.includes(leverPulled))
  105. if (levers[property] != 'noVal') levers[property] = !levers[property];
  106. }
  107. }
  108. }
  109.  
  110. /* Функция заполняет объект levers, который содержит значения true\false для всех возможных пар рычагов,
  111. * работает только до тех пор, пока есть пары рычагов, информация о которых неизвестна
  112. * */
  113. function populatingLeversObj(stateId) {
  114.  
  115. let lever1ToSend;
  116. let lever2ToSend;
  117.  
  118. for (let property in levers) {
  119. if (levers.hasOwnProperty(property)) {
  120. if (levers[property] == 'noVal') {
  121. lever1ToSend = property.charAt(0);
  122. lever2ToSend = property.charAt(1);
  123. }
  124. }
  125. }
  126.  
  127. if (lever1ToSend && lever2ToSend) sendCheckMessage(stateId, lever1ToSend, lever2ToSend);
  128. }
  129.  
  130. /* проверяет все ли пары рычагов находятся в true, если да, то пытаться вырубить машину */
  131. function checkIfAllLeversAreSame(stateId) {
  132.  
  133. for (let property in levers) {
  134. if (levers.hasOwnProperty(property)) {
  135. if (levers[property] == false || levers[property] == 'noVal') {
  136. return;
  137. }
  138.  
  139. }
  140. }
  141.  
  142. if (!firedPower) {
  143. console.log('EVERYTHING IS TRUE, INITIATE SHUTDOWN!');
  144. firedPower = true;
  145. let shutdownMessage = {"action": "powerOff", "stateId": stateId};
  146. connection.send(JSON.stringify(shutdownMessage));
  147. allLeversAreSame = true;
  148. }
  149.  
  150. }
  151. });
  152.  
  153. client.connect('ws://nuclear.t.javascript.ninja', 'echo-protocol');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement