You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rld_m3.py 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import gmod
  2. p=print
  3. # should this really be a class
  4. # class Eobj:pass
  5. gx = gmod.gx
  6. import json
  7. from simple_websocket import Server
  8. from simple_websocket.ws import Base
  9. import base64
  10. OKBLUE = '\033[94m'
  11. ENDC = '\033[0m'
  12. import inspect
  13. def ws_disconn(sock,*a,**kw):
  14. gx.dicard_on_close(sock)
  15. ending = json.dumps({
  16. "type":"jm_tmp_dev_sto_rec","from":"self.channel_name",
  17. "CLIENT_KEY":"ws_sto",
  18. "sto_event_type": "user_disconnected",
  19. "group_name":sock.slf["channel_name"],
  20. "from????":sock.slf["channel_name"],
  21. # "group_name":"self.group_name",
  22. "channel_name":sock.slf["channel_name"],
  23. })
  24. p("ending:::::::::::::::::::::::::")
  25. p(ending)
  26. # gx.send_to_channel("all_groups",ending,"SENED")
  27. gx.send_to_channel(sock.slf["group_name"],ending,"SENED")
  28. # await self.channel_layer.group_send(self.group_name,)
  29. # sock.send(json.dumps({"type":"jm_tmp_dev_sto_rec","from":"self.channel_name",
  30. # gx.send_to_channel("all_groups",json.dumps({"type":"jm_tmp_dev_sto_rec","from":"self.channel_name",
  31. # "CLIENT_KEY":"ws_sto",
  32. # "sto_event_type": "user_disconnected",
  33. # "group_name":"self.group_name",
  34. # "channel_name":"self.channel_name",
  35. # }),"sender")
  36. # p("DISCONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",a,kw)
  37. pass
  38. def ws_conn(sock,*a,**kw):
  39. # return
  40. sock.slf = {}
  41. sock.slf["channel_id"] = hash(sock)
  42. sock.slf["channel_name"] = str(sock.slf["channel_id"])
  43. sock.slf["group_name"] = gx.parse_qs(sock.environ["QUERY_STRING"]).get("room","NO_ROOM")
  44. gmod.glob["all_ws_conn"].add(sock)
  45. # gx.parse_qs
  46. gx.add_to_channel(sock,"all_groups")
  47. old_group_size = gx.add_to_channel(sock,sock.slf["group_name"])
  48. p(OKBLUE,"ws_conn",a,kw,ENDC)
  49. # return
  50. sock_info(sock)
  51. # my_int = sock.slf["channel_id"]
  52. # p(struct.pack("<i",my_int))
  53. # p(base64.b64encode(bytes(str(sock.slf["channel_id"]),"ascii")))
  54. # p(sock.slf["channel_id"].to_bytes(8,"big"))
  55. # p(base64.b64encode(bytes(sock.slf["channel_id"])))
  56. # p(base64.b64encode((sock.slf["channel_id"]).to_bytes(1)))
  57. p(sock.slf)
  58. p()
  59. p()
  60. sock.send(json.dumps({
  61. "CLIENT_KEY":"ws_sto",
  62. "sto_event_type": "connection_info",
  63. "channel_name":sock.slf["channel_name"],
  64. "group_name":"group_name",
  65. "z":"z",
  66. }))
  67. # r'''
  68. sock.send(json.dumps(
  69. {
  70. "CLIENT_KEY": "ws_sto",
  71. "group_count": old_group_size+1,
  72. "sto_event_type": "group_count",
  73. # "ws_conn":"???",
  74. }))
  75. # '''
  76. # r'''
  77. # '''
  78. # _check_sendfile_params
  79. # OKBLUE = '\033[94m'
  80. # ENDC = '\033[0m'
  81. c2 = '\033[34m'
  82. c1 = '\033[32m'
  83. def oinfo(o):
  84. p(o)
  85. for en in dir(o):
  86. if en[:2]=="__":continue
  87. attr=getattr(o,en,"NO ATTR")
  88. p((en + "\t").expandtabs(21),c1,type(attr),"'\033[0m'")
  89. # p(en)
  90. p()
  91. def sock_info(sock):
  92. p('\033[31m',"sock_info",ENDC)
  93. p("[[")
  94. oinfo(sock)
  95. oinfo(sock.sock)
  96. p("]]")
  97. p(sock.environ)
  98. for k,v in sock.environ.items():
  99. p(k)
  100. # p(c2,k,ENDC)
  101. p(c2,v,ENDC)
  102. # p(v)
  103. p(sock.environ["QUERY_STRING"])
  104. p(gx.parse_qs(sock.environ["QUERY_STRING"]).get("room","NO_ROOM"))
  105. p(type(sock),"....")
  106. for en in dir(sock):
  107. # p(en)
  108. # p("\033[36m",type(attr),ENDC,sep="")
  109. attr=getattr(sock,en,"NO ATTR")
  110. sock.sock.__class__
  111. # p()
  112. # p("WS.",inspect.getfile(sock.ws.__class__))
  113. # p("SOCK.",inspect.getfile(sock.sock.__class__))
  114. # p("SOCK.",inspect.getfile(sock.sock.send))
  115. def handle_msg(sock,txt_msg,*a,**kw):
  116. # [a,kw]
  117. # p(":::::",sock.environ)
  118. # p("handle_msg!!!!!!!!!!!!!!!!!!",sock,txt_msg)
  119. # sock_info(sock)
  120. # gx.send_to_channel("all_groups",txt_msg,"sender")
  121. try:
  122. data = json.loads(txt_msg)
  123. # gx.send_to_channel("all_groups",txt_msg,"sender")
  124. # gx.group_jsend("",data,sock)
  125. gx.group_jsend(sock.slf["group_name"],data,sock)
  126. # gx.send_to_channel(sock.slf["group_name"],txt_msg,"sender")
  127. # p("J",type(data),data)
  128. except Exception as Err:
  129. p("handle_msg ERR:",Err)
  130. # def _custom_close(*a,**kw):
  131. def _custom_close(self,reason=None, message=None):
  132. p("_custom_close",reason,message)
  133. if True:
  134. gx.ws_disconn(self,reason=reason, message=message)
  135. Base.close(self,reason=reason, message=message)
  136. # try:
  137. # except Exception as E:
  138. # p("_custom_close EXCEPTION!",E)
  139. # p(Base.close)
  140. # p(super().close(*a,**kw))
  141. # Base.close("self",reason="reason?", message="..message")
  142. Server.close =_custom_close
  143. def msgtest():
  144. p("msgtest")
  145. p(len(gmod.glob["all_ws_conn"]))
  146. for en in gmod.glob["all_ws_conn"]:
  147. p(en)
  148. # en.close()
  149. p(en.sock)
  150. for en2 in dir(en.sock):pass
  151. # p(en2)
  152. # en.send("::CLOSE::")
  153. en.send("::CLOSE::")
  154. # p(inspect.getsource(en.sock.close))
  155. # p(inspect.getfile(en.sock.close))
  156. # en.sock.close()
  157. # en.connected =0
  158. msgtest()
  159. gmod.gx.ws_disconn = ws_disconn
  160. gmod.gx.ws_conn = ws_conn
  161. gmod.gx.handle_msg = handle_msg
  162. # _group_msg("ZZZ",1,2,3,4,5,6)
  163. # msg="q"