websocket.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. var WebsocketConnect = function(wshost,fAutoConnect,fAutojoin,callbacks,room_msg,msg_handler)
  2. {
  3. if(!wshost) {
  4. return;
  5. }
  6. var socket= null;
  7. var fauto_connect = fAutoConnect;
  8. var fauto_join = fAutojoin;
  9. var is_connect = false;
  10. var meId = 0;
  11. var webSocket_callbacks = {
  12. onopen: callbacks.onOpen,
  13. onerror: callbacks.onError,
  14. onclose: callbacks.onClose
  15. };
  16. var room_msgs = {
  17. room : room_msg.room,
  18. roomkey : room_msg.roomkey
  19. };
  20. var Json_parse = function(json)
  21. {
  22. var datas = json;
  23. var get_me = function(){
  24. var me_id = datas.content.me;
  25. var users = datas.content.users;
  26. for(var i=0;i<users.length;i++) {
  27. if(users[i].userid == me_id) {
  28. return users[i];
  29. }
  30. }
  31. };
  32. var get_all = function(){
  33. return datas.content.users;
  34. };
  35. var get_msg = function(){
  36. return datas.content.content;
  37. };
  38. var get_from = function() {
  39. return datas.content.from;
  40. };
  41. return {
  42. get_me:get_me,
  43. get_all:get_all,
  44. getDatas:datas,
  45. get_msg:get_msg,
  46. get_from:get_from
  47. }
  48. };
  49. var Send = function(val){
  50. var jsonobject = {
  51. op:"message",
  52. room:room_msgs.room,
  53. room_key:room_msgs.roomkey,
  54. type:"text",
  55. content:val
  56. };
  57. socket.send(JSON.stringify(jsonobject));
  58. };
  59. var shake_bonus = function(val){
  60. var jsonobject = {
  61. op:"shake",
  62. room:room_msgs.room,
  63. room_key:room_msgs.roomkey,
  64. type:"shake_bonus",
  65. content:val
  66. };
  67. socket.send(JSON.stringify(jsonobject));
  68. };
  69. var login = function login()
  70. {
  71. var jsonobject = {
  72. op:"join",
  73. room:room_msgs.room,
  74. room_key:room_msgs.roomkey
  75. };
  76. socket.send(JSON.stringify(jsonobject));
  77. };
  78. var bargain = function(){
  79. var jsonobject = {
  80. op:"bargain",
  81. room:room_msgs.room,
  82. room_key:room_msgs.roomkey
  83. };
  84. socket.send(JSON.stringify(jsonobject));
  85. };
  86. var bargain_over = function () {
  87. var jsonobject = {
  88. op:"close",
  89. room:room_msgs.room,
  90. room_key:room_msgs.roomkey
  91. };
  92. socket.send(JSON.stringify(jsonobject));
  93. };
  94. var Close = function(){
  95. socket.close();
  96. };
  97. var reconnect = function(){
  98. setTimeout(function(){
  99. if(fauto_connect) {
  100. connect();
  101. }
  102. },1000);
  103. };
  104. function connect()
  105. {
  106. socket = null;
  107. if(window.WebSocket) {
  108. socket = new WebSocket(wshost);
  109. }
  110. else {
  111. console.log('您的设备不支持WebSocket');
  112. return;
  113. }
  114. socket.onopen = function()
  115. {
  116. webSocket_callbacks.onopen();
  117. if(fauto_join && is_connect) {
  118. login();
  119. }
  120. };
  121. socket.onerror = function(){
  122. console.log('error');
  123. };
  124. socket.onclose = function(e){
  125. console.log('onclose:'+ e);
  126. webSocket_callbacks.onclose();
  127. reconnect();
  128. };
  129. socket.onmessage = function(msg)
  130. {
  131. var datasJsonParse = JSON.parse(msg.data);
  132. var op = datasJsonParse.op;
  133. if(op == 'ret_join') {
  134. if( msg_handler.room_info) {
  135. msg_handler.room_info(datasJsonParse);
  136. }
  137. }
  138. else if(op == 'join') {
  139. if( msg_handler.join) {
  140. msg_handler.join(datasJsonParse)
  141. }
  142. }
  143. else if(op == 'message') {
  144. if(msg_handler.message) {
  145. msg_handler.message(datasJsonParse);
  146. }
  147. }
  148. else if(op == 'bargain'){
  149. msg_handler.message(datasJsonParse);
  150. }
  151. else if(op == 'ret_bargain') {
  152. msg_handler.message(datasJsonParse);
  153. }
  154. else if(op == 'bargain_close') {
  155. msg_handler.message(datasJsonParse);
  156. }
  157. };
  158. is_connect = true;
  159. }
  160. if(fauto_connect) {
  161. connect();
  162. }
  163. return {
  164. connect:connect,
  165. send:Send,
  166. shake_bonus:shake_bonus,
  167. login:login,
  168. close:Close,
  169. Json_parse:Json_parse,
  170. getMeId:meId,
  171. setMeId:function(id){
  172. meId = id;
  173. },
  174. bargain:bargain,
  175. bargain_over:bargain_over
  176. }
  177. };