data.js 19 KB

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