data.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  1. const PKT_TYPE=function(){
  2. var len = 0;
  3. return {
  4. PKT_TYPE_ACK:len++,
  5. PKT_TYPE_PARAS:len++,
  6. PKT_TYPE_POWER_CH:len++, //power_ch_t
  7. PKT_TYPE_POWER_TOTAL:len++, //power_total_t
  8. PKT_TYPE_CH_ALL:len++,
  9. PKT_TYPE_ALARM:len++,
  10. PKT_TYPE_SENSOR:len++,
  11. PKT_TYPE_BREAKER:len++,
  12. PKT_TYPE_STAT:len++,
  13. PKT_TYPE_MESG:len++,
  14. PKT_TYPE_FILE:len++,
  15. }
  16. }();
  17. const SUB_TYPE=function(){
  18. var len = 0;
  19. return {
  20. SUB_TYPE_POWER_SWITCH:len++,
  21. SUB_TYPE_POWER_ALARM:len++,
  22. SUB_TYPE_POWER_THRESHOLD:len++, //power_ch_t
  23. SUB_TYPE_POWER_START_DELAY:len++, //power_total_t
  24. SUB_TYPE_POWER_STOP_DELAY:len++,
  25. SUB_TYPE_POWER_RESET_CONSUMP:len++,
  26. SUB_TYPE_POWER_SCAN:len++,
  27. }
  28. }();
  29. ///////////////////////////////////////////////////////
  30. function array_to_string(data){
  31. var s = "";
  32. for(var i=0;i<data.length && data[i] !=0;i++){
  33. s +=String.fromCharCode(data[i]);
  34. }
  35. return s;
  36. }
  37. function string_to_array(data,attr){
  38. for(var i=0;i<data.length;i++){
  39. attr[i] = data.charCodeAt(i);
  40. }
  41. return attr;
  42. }
  43. function array_cat(a1,a2){
  44. var tlen=a1.byteLength+a2.byteLength;
  45. var buffer = new ArrayBuffer(tlen);
  46. var vw = new Uint8Array(buffer);
  47. var vw1 = new Uint8Array(a1);
  48. for(var i=0; i<a1.byteLength; i++) {
  49. vw[i] = vw1[i];
  50. }
  51. var vw2 = new Uint8Array(a2);
  52. for(var i=0; i<a2.byteLength; i++) {
  53. vw[i+a1.byteLength] = vw2[i];
  54. }
  55. return buffer;
  56. }
  57. ///////////////////////////////////////////////////
  58. function bin_to_hdr(bin) {
  59. var tmp, length=0;
  60. tmp = new DataView(bin, length);
  61. this.magic = tmp.getUint16(0,true);
  62. length += 2;
  63. tmp = new DataView(bin, length);
  64. this.type = tmp.getUint8(0,true);
  65. length += 1;
  66. tmp = new DataView(bin, length);
  67. this.subtype = tmp.getUint8(0,true);
  68. length += 1;
  69. tmp = new DataView(bin, length);
  70. this.nack = tmp.getUint8(0,true);
  71. length += 1;
  72. tmp = new DataView(bin, length);
  73. this.dlen = tmp.getUint32(0,true);
  74. length += 4;
  75. this.len = length;
  76. }
  77. function bin_to_info(bin) {
  78. var tmp, length=0;
  79. tmp = new DataView(bin, length);
  80. this.type = tmp.getUint8(0,true);
  81. length += 1;
  82. tmp = new DataView(bin, length);
  83. this.addr = tmp.getUint8(0,true);
  84. length += 1;
  85. tmp = new DataView(bin, length);
  86. this.ch = tmp.getUint8(0,true);
  87. length += 1;
  88. tmp = new DataView(bin, length);
  89. this.sch = tmp.getUint8(0,true);
  90. length += 1;
  91. tmp = new DataView(bin, length);
  92. this.pid = tmp.getUint8(0,true);
  93. length += 1;
  94. tmp = new DataView(bin, length);
  95. this.start_delay = tmp.getUint32(0,true);
  96. length += 4;
  97. tmp = new DataView(bin, length);
  98. this.stop_delay = tmp.getUint32(0,true);
  99. length += 4;
  100. this.len = length;
  101. }
  102. function bin_to_power(bin) {
  103. var tmp, length=0;
  104. tmp = new DataView(bin, length);
  105. this.voltage = tmp.getFloat32(0,true);
  106. length += 4;
  107. tmp = new DataView(bin, length);
  108. this.current = tmp.getFloat32(0,true);
  109. length += 4;
  110. tmp = new DataView(bin, length);
  111. this.power = tmp.getFloat32(0,true);
  112. length += 4;
  113. tmp = new DataView(bin, length);
  114. this.freq = tmp.getFloat32(0,true);
  115. length += 4;
  116. tmp = new DataView(bin, length);
  117. this.factor = tmp.getFloat32(0,true);
  118. length += 4;
  119. tmp = new DataView(bin, length);
  120. this.consump = tmp.getFloat32(0,true);
  121. length += 4;
  122. tmp = new DataView(bin, length);
  123. this.status = tmp.getUint8(0,true);
  124. length += 1;
  125. tmp = new DataView(bin, length);
  126. this.nwire = tmp.getUint8(0,true);
  127. length += 1;
  128. this.len = length;
  129. }
  130. function bin_to_alarm(bin) {
  131. var tmp, length=0;
  132. tmp = new DataView(bin, length);
  133. this.v_upper = tmp.getUint8(0,true);
  134. length += 1;
  135. tmp = new DataView(bin, length);
  136. this.v_lower = tmp.getUint8(0,true);
  137. length += 1;
  138. tmp = new DataView(bin, length);
  139. this.c_upper = tmp.getUint8(0,true);
  140. length += 1;
  141. tmp = new DataView(bin, length);
  142. this.p_upper = tmp.getUint8(0,true);
  143. length += 1;
  144. tmp = new DataView(bin, length);
  145. this.w_upper = tmp.getUint8(0,true);
  146. length += 1;
  147. tmp = new DataView(bin, length);
  148. this.ph_loss = tmp.getUint8(0,true);
  149. length += 1;
  150. this.len = length;
  151. }
  152. function bin_to_thrval(bin) {
  153. var tmp, length=0;
  154. tmp = new DataView(bin, length);
  155. this.en = tmp.getUint8(0,true);
  156. length += 1;
  157. tmp = new DataView(bin, length);
  158. this.val = tmp.getFloat32(0,true);
  159. length += 4;
  160. tmp = new DataView(bin, length);
  161. this.act = tmp.getUint8(0,true);
  162. length += 1;
  163. this.act_para = [];
  164. tmp = new DataView(bin, length);
  165. for(var i=0; i<14; i++) {
  166. this.act_para[i] = tmp.getUint8(i,true);
  167. }
  168. length += 14;
  169. this.len = length;
  170. }
  171. function bin_to_thr(bin) {
  172. var tmp, length=0;
  173. this.v_upper = new bin_to_thrval(bin.slice(length));
  174. length += this.v_upper.len;
  175. this.v_lower = new bin_to_thrval(bin.slice(length));
  176. length += this.v_lower.len;
  177. this.c_upper = new bin_to_thrval(bin.slice(length));
  178. length += this.c_upper.len;
  179. this.p_upper = new bin_to_thrval(bin.slice(length));
  180. length += this.p_upper.len;
  181. this.w_upper = new bin_to_thrval(bin.slice(length));
  182. length += this.w_upper.len;
  183. this.len = length;
  184. }
  185. function bin_to_powerc(bin) {
  186. var tmp, bin2, length=0;
  187. this.info = new bin_to_info(bin);
  188. length += this.info.len;
  189. this.power = [];
  190. for(var i=0; i<3; i++) {
  191. this.power[i] = new bin_to_power(bin.slice(length));
  192. length += this.power[i].len;
  193. }
  194. this.thr = new bin_to_thr(bin.slice(length));
  195. length += this.thr.len;
  196. this.alarm = new bin_to_alarm(bin.slice(length));
  197. length += this.alarm.len;
  198. tmp = new DataView(bin, length);
  199. this.time = tmp.getUint32(0,true);
  200. length += this.time.len;
  201. tmp = new DataView(bin, length);
  202. this.pbrd = tmp.getUint32(0,true);
  203. length += this.pbrd.len;
  204. this.len = length;
  205. }
  206. function bin_to_total(bin) {
  207. var tmp, length=0;
  208. tmp = new DataView(bin, length);
  209. this.voltage = tmp.getFloat32 (0,true);
  210. length += 4;
  211. tmp = new DataView(bin, length);
  212. this.current = tmp.getFloat32(0,true);
  213. length += 4;
  214. tmp = new DataView(bin, length);
  215. this.power = tmp.getFloat32(0,true);
  216. length += 4;
  217. tmp = new DataView(bin, length);
  218. this.freq = tmp.getFloat32(0,true);
  219. length += 4;
  220. tmp = new DataView(bin, length);
  221. this.consump = tmp.getFloat32 (0,true);
  222. length += 4;
  223. tmp = new DataView(bin, length);
  224. this.active = tmp.getFloat32(0,true);
  225. length += 4;
  226. tmp = new DataView(bin, length);
  227. this.reactive = tmp.getFloat32(0,true);
  228. length += 4;
  229. tmp = new DataView(bin, length);
  230. this.apparent = tmp.getFloat32(0,true);
  231. length += 4;
  232. this.len = length;
  233. }
  234. function bin_to_powert(bin) {
  235. var tmp, length=0;
  236. tmp = new DataView(bin, length);
  237. this.type = tmp.getUint8(0,true);
  238. length += 1;
  239. this.total = [];
  240. for(var i=0; i<3; i++) {
  241. this.total[i] = new bin_to_total(bin.slice(length));
  242. length += this.total[i].len;
  243. }
  244. this.len = length;
  245. }
  246. function bin_to_chall(bin) {
  247. var tmp, length=0;
  248. tmp = new DataView(bin, length);
  249. var chall = tmp.getUint8(0,true);
  250. length += 1;
  251. return chall;
  252. }
  253. function bin_to_alarmd(bin) {
  254. var tmp, length=0;
  255. tmp = new DataView(bin, length);
  256. this.ch = tmp.getUint8(0,true);
  257. length += 1;
  258. this.alarm = new bin_to_alarm(bin.slice(leng));
  259. length += this.alarm.len;
  260. tmp = new DataView(bin, length);
  261. this.time = tmp.getUint32(0,true);
  262. length += 1;
  263. this.len = length;
  264. }
  265. ///////////////////////////////////////////////////
  266. function hdr_to_bin(js) {
  267. var tmp, length=0;
  268. var buffer = new ArrayBuffer(js.len);
  269. tmp = new DataView(buffer, length);
  270. tmp.setUint16(0,js.magic,true);
  271. length += 2;
  272. tmp = new DataView(buffer, length);
  273. tmp.setUint8(0,js.type,true);
  274. length += 1;
  275. tmp = new DataView(buffer, length);
  276. tmp.setUint8(0,js.subtype,true);
  277. length += 1;
  278. tmp = new DataView(buffer, length);
  279. tmp.setUint8(0,js.nack,true);
  280. length += 1;
  281. tmp = new DataView(buffer, length);
  282. tmp.setUint32(0,js.dlen,true);
  283. length += 4;
  284. return buffer;
  285. }
  286. function info_to_bin(js) {
  287. var tmp, length=0;
  288. var buffer = new ArrayBuffer(js.len);
  289. tmp = new DataView(buffer, length);
  290. tmp.setUint8(0,js.type,true);
  291. length += 1;
  292. tmp = new DataView(buffer, length);
  293. tmp.setUint8(0,js.addr,true);
  294. length += 1;
  295. tmp = new DataView(buffer, length);
  296. tmp.setUint8(0,js.ch,true);
  297. length += 1;
  298. tmp = new DataView(buffer, length);
  299. tmp.setUint8(0,js.sch,true);
  300. length += 1;
  301. tmp = new DataView(buffer, length);
  302. tmp.setUint8(0,js.pid,true);
  303. length += 1;
  304. tmp = new DataView(buffer, length);
  305. tmp.setUint32(0,js.start_delay,true);
  306. length += 4;
  307. tmp = new DataView(buffer, length);
  308. tmp.setUint32(0,js.stop_delay,true);
  309. length += 4;
  310. return buffer;
  311. }
  312. function power_to_bin(js) {
  313. var tmp, length=0;
  314. var buffer = new ArrayBuffer(js.len);
  315. tmp = new DataView(buffer, length);
  316. tmp.setFloat32(0,js.voltage,true);
  317. length += 4;
  318. tmp = new DataView(buffer, length);
  319. tmp.setFloat32(0,js.current,true);
  320. length += 4;
  321. tmp = new DataView(buffer, length);
  322. tmp.setFloat32(0,js.power,true);
  323. length += 4;
  324. tmp = new DataView(buffer, length);
  325. tmp.setFloat32(0,js.freq,true);
  326. length += 4;
  327. tmp = new DataView(buffer, length);
  328. tmp.setFloat32(0,js.factor,true);
  329. length += 4;
  330. tmp = new DataView(buffer, length);
  331. tmp.setFloat32(0,js.consump,true);
  332. length += 4;
  333. tmp = new DataView(buffer, length);
  334. tmp.setUint8(0,js.status,true);
  335. length += 1;
  336. tmp = new DataView(buffer, length);
  337. tmp.setUint8(0,js.nwire,true);
  338. length += 1;
  339. return buffer;
  340. }
  341. function alarm_to_bin(js) {
  342. var tmp, length=0;
  343. var buffer = new ArrayBuffer(js.len);
  344. tmp = new DataView(buffer, length);
  345. tmp.setUint8(0,js.v_upper,true);
  346. length += 1;
  347. tmp = new DataView(buffer, length);
  348. tmp.setUint8(0,js.v_lower,true);
  349. length += 1;
  350. tmp = new DataView(buffer, length);
  351. tmp.setUint8(0,js.c_upper,true);
  352. length += 1;
  353. tmp = new DataView(buffer, length);
  354. tmp.setUint8(0,js.p_upper,true);
  355. length += 1;
  356. tmp = new DataView(buffer, length);
  357. tmp.setUint8(0,js.w_upper,true);
  358. length += 1;
  359. tmp = new DataView(buffer, length);
  360. tmp.setUint8(0,js.ph_loss,true);
  361. length += 1;
  362. return buffer;
  363. }
  364. function thrval_to_js(js) {
  365. var tmp, length=0;
  366. var buffer = new ArrayBuffer(js.len);
  367. tmp = new DataView(buffer, length);
  368. tmp.setUint8(0,js.en,true);
  369. length += 1;
  370. tmp = new DataView(buffer, length);
  371. tmp.setFloat32(0,js.val,true);
  372. length += 4;
  373. tmp = new DataView(buffer, length);
  374. tmp.getUint8(0,js.act,true);
  375. length += 1;
  376. tmp = new DataView(buffer, length);
  377. for(var i=0; i<14; i++) {
  378. tmp.setUint8(i,js.act_para[i],true);
  379. }
  380. length += 14;
  381. return buffer;
  382. }
  383. function thr_to_bin(js) {
  384. var bin,tmp, length=0;
  385. bin = thrval_to_js(js.v_upper);
  386. tmp = thrval_to_js(js.v_lower);
  387. bin = array_cat(bin, tmp);
  388. tmp = thrval_to_js(js.c_upper);
  389. bin = array_cat(bin, tmp);
  390. tmp = thrval_to_js(js.p_upper);
  391. bin = array_cat(bin, tmp);
  392. tmp = thrval_to_js(js.w_upper);
  393. bin = array_cat(bin, tmp);
  394. return bin;
  395. }
  396. function powerc_to_bin(js) {
  397. var bin,tmp, length=0;
  398. bin = info_to_bin(js.info);
  399. for(var i=0; i<3; i++) {
  400. tmp = power_to_bin(js.power[i]);
  401. bin = array_cat(bin, tmp);
  402. }
  403. tmp = thr_to_bin(js.thr);
  404. bin = array_cat(bin, tmp);
  405. tmp = alarm_to_bin(js.alarm);
  406. bin = array_cat(bin, tmp);
  407. var buf = new ArrayBuffer(8);
  408. tmp = new DataView(buf, 0);
  409. tmp.setUint32(0,js.time,true);
  410. tmp.setUint32(4,js.pbrd,true);
  411. bin = array_cat(bin, buf);
  412. return bin;
  413. }
  414. function total_to_bin(js) {
  415. var tmp, length=0;
  416. var buffer = new ArrayBuffer(js.len);
  417. tmp = new DataView(buffer, length);
  418. tmp.setFloat32(0,js.voltage,true);
  419. length += 4;
  420. tmp = new DataView(buffer, length);
  421. tmp.setFloat32(0,js.current,true);
  422. length += 4;
  423. tmp = new DataView(buffer, length);
  424. tmp.setFloat32(0,js.power,true);
  425. length += 4;
  426. tmp = new DataView(buffer, length);
  427. tmp.setFloat32(0,js.freq,true);
  428. length += 4;
  429. tmp = new DataView(buffer, length);
  430. tmp.setFloat32(0,js.consump,true);
  431. length += 4;
  432. ///
  433. tmp = new DataView(buffer, length);
  434. tmp.setFloat32(0,js.active,true);
  435. length += 4;
  436. tmp = new DataView(buffer, length);
  437. tmp.setFloat32(0,js.reactive,true);
  438. length += 4;
  439. tmp = new DataView(buffer, length);
  440. tmp.setFloat32(0,js.apparent,true);
  441. length += 4;
  442. return buffer;
  443. }
  444. function powert_to_bin(js) {
  445. var tmp,bin2,length=0;
  446. var bin = new ArrayBuffer(1);
  447. tmp = new DataView(bin, length);
  448. tmp.setUint8(0,js.type,true);
  449. length += 4;
  450. for(var i=0; i<3; i++) {
  451. bin2 = total_to_bin(js.total[i]);
  452. bin = array_cat(bin, bin2);
  453. }
  454. return bin;
  455. }
  456. function chall_to_bin(js) {
  457. var tmp, length=0;
  458. var bin = new ArrayBuffer(1);
  459. tmp = new DataView(bin, length);
  460. tmp.setUint8(0,js,true);
  461. length += 1;
  462. return bin;
  463. }
  464. function alarmd_to_bin(js) {
  465. var tmp, length=0;
  466. var bin,buffer = new ArrayBuffer(1);
  467. tmp = new DataView(buffer, 0);
  468. tmp.setUint8(0,js.ch,true);
  469. var alarm = alarm_to_bin(js.alarm);
  470. bin = array_cat(buffer, alarm);
  471. buffer = new ArrayBuffer(4);
  472. tmp = new DataView(buffer, 0);
  473. tmp.setUint32(0,js.time,true);
  474. return array_cat(bin, buffer);
  475. }
  476. //////////////////////////////////////////////////////////////
  477. var XXX ={};
  478. XXX.hdr = function() {
  479. this.j2b = function (js) {
  480. var tmp;
  481. var hdr = new hdr_to_bin(js);
  482. switch(js.type){
  483. case PKT_TYPE.PKT_TYPE_POWER_CH:
  484. tmp = BIN.powerc.j2b(js.powerc);
  485. break;
  486. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  487. tmp = BIN.powert.j2b(js.powert);
  488. break;
  489. case PKT_TYPE.PKT_TYPE_CH_ALL:
  490. tmp = BIN.chall.j2b(js.chall);
  491. break;
  492. case PKT_TYPE.PKT_TYPE_ALARM:
  493. tmp = BIN.alarm.j2b(js.alarmd);
  494. break;
  495. default:
  496. return tmp;
  497. }
  498. return array_cat(hdr,tmp);
  499. };
  500. this.b2j = function (bin) {
  501. var tmp;
  502. var hdr = new bin_to_hdr(bin);
  503. if(hdr.nack == 1){
  504. //tmp = myBinary.ack.bin2js(bin,this.hdr.len,true);
  505. //myLog('log',tmp);
  506. //var data = tmp.data;
  507. }
  508. var data = bin.slice(hdr.len);
  509. switch(hdr.type) {
  510. case PKT_TYPE.PKT_TYPE_POWER_CH:
  511. hdr.powerc = BIN.powerc.b2j(data);
  512. break;
  513. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  514. hdr.powert = BIN.powert.b2j(data);
  515. break;
  516. case PKT_TYPE.PKT_TYPE_CH_ALL:
  517. hdr.chall = BIN.chall.b2j(data);
  518. break;
  519. case PKT_TYPE.PKT_TYPE_ALARM:
  520. hdr.alarmd = BIN.alarmd.b2j(data);
  521. break;
  522. default :
  523. console.log("wrong hdr type: "+hdr.type);
  524. }
  525. return hdr;
  526. }
  527. };
  528. XXX.paras=function() {
  529. this.j2b = function (js) {
  530. }
  531. this.b2j = function (bin) {
  532. }
  533. };
  534. XXX.powerc=function() {
  535. this.j2b = function (js) {
  536. return new powerc_to_bin(js);
  537. }
  538. this.b2j = function (bin) {
  539. return new bin_to_powerc(bin);
  540. }
  541. };
  542. XXX.powert=function() {
  543. this.j2b = function (js) {
  544. return new powert_to_bin(js);
  545. }
  546. this.b2j = function (bin) {
  547. return new bin_to_powert(bin);
  548. }
  549. };
  550. XXX.chall=function() {
  551. this.j2b = function (js) {
  552. return new chall_to_bin(js);
  553. }
  554. this.b2j = function (bin) {
  555. return new bin_to_chall(bin);
  556. }
  557. };
  558. XXX.alarmd=function() {
  559. this.j2b = function (js) {
  560. return new alarmd_to_bin(js);
  561. }
  562. this.b2j = function (bin) {
  563. return new bin_to_alarmd(bin);
  564. }
  565. };
  566. var BIN=new function() {
  567. this.hdr = new XXX.hdr();
  568. this.paras = new XXX.paras();
  569. this.powerc = new XXX.powerc();
  570. this.powert = new XXX.powert();
  571. this.chall = new XXX.chall();
  572. this.alarmd = new XXX.alarmd();
  573. }();
  574. //////////////////////////////////////////
  575. function LOG(){
  576. var data = [];
  577. for(var i= 1,len=arguments.length;i<len;i++){
  578. data.push(arguments[i])
  579. }
  580. console.log(data);
  581. }
  582. function WS(url,fn) {
  583. this.url = url;
  584. this.name = 'myWebs';
  585. this.open = _open;
  586. this.reopen = _reopen;
  587. this.close = _close;
  588. this.send = _send;
  589. this.state = _state;
  590. this.setcb = _setcb;
  591. this.closeCount = 0;
  592. this.maxConnect = 100;
  593. var his = this;
  594. this.open();
  595. function _open() {
  596. console.log("____ url: \n", his.url);
  597. his.ws = new WebSocket(his.url);
  598. his.ws.binaryType = 'arraybuffer';
  599. his.ws.onopen = _onopen;
  600. his.ws.onclose = _onclose;
  601. his.ws.onmessage = _onmsg;
  602. his.ws.onerror = _onerror;
  603. }
  604. function _reopen() {
  605. _close();
  606. _open(his.url);
  607. }
  608. function _close() {
  609. his.ws.close();
  610. }
  611. function _send(msg) {
  612. if (his.ws.readyState != WebSocket.OPEN)
  613. return;
  614. his.ws.send(msg);
  615. }
  616. function _state() {
  617. return his.ws.readyState;
  618. }
  619. function _setcb(tp, f) {
  620. switch (tp) {
  621. case "open":
  622. his.ws.onopen = f;
  623. break;
  624. case "close":
  625. his.ws.onclose = f;
  626. break;
  627. case "msg":
  628. his.ws.onmessage = f;
  629. break;
  630. case "err":
  631. his.ws.onerror = f;
  632. break;
  633. }
  634. }
  635. function _onopen(evt) {
  636. his.closeCount = 0;
  637. console.log("___ ws.onopen");
  638. }
  639. function _onclose(evt) {
  640. LOG("ws.onclose");
  641. setTimeout(_reopen, 3000);
  642. his.closeCount += 1;
  643. }
  644. function _onmsg(evt) {
  645. console.log("___ ws.onmsg");
  646. if (evt.data instanceof ArrayBuffer) {
  647. fn(evt.data);
  648. }
  649. }
  650. function _onerror(evt) {
  651. console.log("___ ws.onerror");
  652. //write_scr('<span style="color: red;">ERROR:</span> '+ evt.data);
  653. }
  654. }