您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

jsync_test.js 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. // clog("/////////")
  2. // msto_sc_proxy
  3. // permissions_def
  4. // connection_info_handler
  5. // /*
  6. function get_local_sto_id(){
  7. return glob_u.data.jsync_local_id
  8. }
  9. function get_session_sto_id(){
  10. return glob_u.data.jsync_session_id
  11. }
  12. function get_ws_channel_name(){
  13. return glob_u.data.channel_name
  14. }
  15. function gen_djc_srv_id(){
  16. // I don't know how often this will generate duplicates
  17. var djc_srv_id = localStorage.djc_srv_id
  18. var djc_srv_id_vers = localStorage.djc_srv_id_vers
  19. const current_id_vers = 0.0
  20. if (Number(djc_srv_id_vers) < current_id_vers || !(djc_srv_id)){
  21. clog("????")
  22. localStorage.djc_srv_id = ((Math.random()+"").replace("0.","") - 0).toString(16)
  23. localStorage.djc_srv_id_vers = current_id_vers
  24. }
  25. glob_u.data.djc_srv_id = localStorage.djc_srv_id
  26. clog("djc_srv_id:",{version:localStorage.djc_srv_id_vers,id:localStorage.djc_srv_id})
  27. }
  28. function init_msto_user_data(o,scope,info){
  29. var ws_channel_name = get_ws_channel_name()
  30. var local_sto_id = get_local_sto_id()
  31. // clog("init_msto_user_data???",{local_sto_id,ws_channel_name,o,scope,info})
  32. if (!glob_u.ws.sockets.ws1.params.include_ws_channel_data){return}
  33. msto.ws_channels[ws_channel_name]=msto.ws_channels[ws_channel_name] || {id:local_sto_id}
  34. if (!glob_u.ws.sockets.ws1.params.include_participants_data){return}
  35. msto.participants[local_sto_id]=msto.participants[local_sto_id] || {}
  36. // clog("init_msto_user_dataw???")
  37. }
  38. glob_u.cb.ws.reg_cb(init_msto_user_data,"WS_MSTO_INITED","init_msto_user_data")
  39. window.permissions_def = window.permissions_def || {
  40. participants:{
  41. m:["participants"],
  42. fn(set_scope,match){
  43. if (match.fp[1] == "rejx")
  44. throw "permission err"
  45. return
  46. },
  47. }
  48. }
  49. // */
  50. // jsync_local_id
  51. // jsync_local_vers
  52. // jsync_session_id
  53. // jsync_session_vers
  54. // jsync_id
  55. // jsync_vers
  56. window.permissions_def = {
  57. participants:{
  58. m:["participants"],
  59. fn(set_scope,match){
  60. if (match.fp[1] != get_local_sto_id()){
  61. console.error("permission err:participants",set_scope,match)
  62. // console.trace("permission err:participants")
  63. throw "permission err"
  64. }
  65. return
  66. },
  67. },
  68. ws_channels:{
  69. m:["ws_channels"],
  70. fn(set_scope,match){
  71. if (match.fp[1] != get_ws_channel_name()){
  72. console.error("permission err:ws_channels",set_scope,match)
  73. throw "permission err"
  74. }
  75. }
  76. },
  77. }
  78. window.permissions_def0 = {
  79. /*
  80. ws_channels:{
  81. m:["ws_channels"],
  82. fn(set_scope,match){
  83. if (match.fp[1] != window.glob_u.data.channel_name){
  84. console.error("permission err:ws_channels",set_scope,match)
  85. throw "permission err"
  86. }
  87. }
  88. },
  89. */
  90. user_channels:{
  91. m:["user_channels"],
  92. fn(set_scope,match){
  93. if (match.fp[1] != get_ws_channel_name()){
  94. console.error("permission err:user_channels",set_scope,match)
  95. throw "permission err"
  96. }
  97. }
  98. },
  99. user_data_sessions:{
  100. m:["user_data_sessions"],
  101. fn(set_scope,match){
  102. if (match.fp[1] != get_session_sto_id()){
  103. console.error("permission err:user_data_sessions",set_scope,match)
  104. // console.trace("permission err:participants")
  105. throw "permission err"
  106. }
  107. return
  108. },
  109. },
  110. user_data_local:{
  111. m:["user_data_local"],
  112. fn(set_scope,match){
  113. if (match.fp[1] != get_local_sto_id()){
  114. console.error("permission err:user_data_local",set_scope,match)
  115. // console.trace("permission err:participants")
  116. throw "permission err"
  117. }
  118. return
  119. },
  120. },
  121. /*
  122. participants:{
  123. m:["participants"],
  124. fn(set_scope,match){
  125. if (match.fp[1] != window.glob_u.data.djc_srv_id){
  126. console.error("permission err:participants",set_scope,match)
  127. // console.trace("permission err:participants")
  128. throw "permission err"
  129. }
  130. return
  131. },
  132. }
  133. */
  134. }
  135. function ensure_jsync_id_is_set(storage_,base_name){
  136. var storage = storage_
  137. var id_name = base_name + "_id"
  138. var vers_name = base_name + "_vers"
  139. var djc_srv_id = storage[id_name]
  140. var djc_srv_id_vers = storage[vers_name]
  141. const current_id_vers = 0.0
  142. if (Number(djc_srv_id_vers) < current_id_vers || !(djc_srv_id)){
  143. storage[id_name] = ((Math.random()+"").replace("0.","") - 0).toString(16)
  144. storage[vers_name] = current_id_vers
  145. }
  146. glob_u.data[id_name] = storage[id_name]
  147. // clog("djc_srv_id:",{version:localStorage.djc_srv_id_vers,id:localStorage.djc_srv_id})
  148. }
  149. ensure_jsync_id_is_set(localStorage,"jsync_local")
  150. ensure_jsync_id_is_set(sessionStorage,"jsync_session")
  151. // function user_disconnected_compatibility_handler(o,scope,info){
  152. // TODO:Fix bug caused by a user disconnecting before the connection is properly established
  153. function connection_info_handler(o,scope,info){
  154. if (o.data.sto_event_type=="connection_info"){
  155. // clog("connection_info_handler:",o,scope,info)
  156. glob_u.data.group_name = o.data.group_name
  157. glob_u.data.channel_name = o.data.channel_name
  158. clog("jsyncdb connected","room name:",glob_u.data.group_name)
  159. } else if (o.data.sto_event_type=="user_disconnected"){
  160. var last_conn =1
  161. var k,v
  162. var ws_conn_data = jc(msto.ws_channels[o.data.channel_name])
  163. delete msto.ws_channels[o.data.channel_name]
  164. for ([k,v] of Object.entries(msto.ws_channels)){
  165. if (v.id == ws_conn_data.id){
  166. last_conn = 0
  167. }
  168. }
  169. if (last_conn){
  170. // clog("DELlast_conn" ,ws_conn_data.id)
  171. delete msto.participants[ws_conn_data.id]
  172. }
  173. clog("user_disconnected:",o.data.channel_name)
  174. return
  175. if (msto.user_channels){
  176. delete msto.user_channels[o.data.channel_name]
  177. }
  178. if (msto.user_channels){
  179. for ([k,v] of Object.entries(msto.user_channels)){
  180. if (v.id == ws_conn_data.id){
  181. last_conn = 0
  182. }
  183. }
  184. }
  185. if (last_conn){
  186. clog("DELlast_conn" ,ws_conn_data.id)
  187. delete msto.user_data_local[ws_conn_data.id]
  188. }
  189. }
  190. }
  191. glob_u.cb.ws.reg_cb(connection_info_handler,"WS_MESSAGE:ws_sto","connection_info_handler")
  192. function ds_test3(){
  193. glob_u.cb.ws.reg_cb(ord_init_once,"WS_OPEN:","ord_init_once")
  194. ws_reload()
  195. }
  196. glob_u.fns.get_local_sto_id = get_local_sto_id
  197. glob_u.fns.get_ws_channel_name = get_ws_channel_name
  198. glob_u.fns.get_session_sto_id = get_session_sto_id
  199. // console.log("??...")
  200. // clog("???")
  201. //