Browse Source

refactor required: jsync core needs to store its connection,init etc state sensibly

master
jfinn 10 months ago
parent
commit
24f3ae7474

+ 11
- 5
flask_server/app.py View File

@@ -134,9 +134,9 @@ for en in dir(app):
134 134
 	print("~",en)
135 135
 '''
136 136
 
137
-import inspect
137
+# import inspect
138 138
 
139
-p(inspect.getsource(app.route))
139
+# p(inspect.getsource(app.route))
140 140
 
141 141
 
142 142
 
@@ -144,9 +144,14 @@ p(inspect.getsource(app.route))
144 144
 # generated by bing seems to work
145 145
 @app.route("/ldir")
146 146
 def list_directory():
147
+	orig_path = os.getcwd()
148
+
149
+
147 150
 	# Get the list of files and directories
148 151
 	# items = os.listdir(DIRECTORY_PATH)
152
+	os.chdir(app.root_path)
149 153
 	items = os.listdir("../js_client")
154
+	os.chdir(orig_path)
150 155
 
151 156
 	# Filter out hidden files and directories
152 157
 	items = [item for item in items if not item.startswith(".")]
@@ -185,18 +190,19 @@ def list_directory():
185 190
 
186 191
 
187 192
 
188
-
189 193
 import inspect
194
+r'''
190 195
 print("APP_ORIG",sock.route)
191 196
 print("APP_ORIG",app.route)
192 197
 print("APP_ORIG",inspect.getfile(app.route))
193 198
 print("APP_ORIG",app.url_map)
199
+# '''
194 200
 if __name__ == '__main__':
195 201
 	pass
196 202
 	# socketio.run(app, debug=True)
197 203
 	# app.run(debug=True,host='0.0.0.0')
198
-	# app.run(debug=True,host='0.0.0.0',port="5001")
199
-	app.run(debug=True,host='0.0.0.0',port="5000")
204
+	app.run(debug=True,host='0.0.0.0',port="5001")
205
+	# app.run(debug=True,host='0.0.0.0',port="5000")
200 206
 	# sock.run(app,host='0.0.0.0', debug=True,allow_unsafe_werkzeug=True)
201 207
 
202 208
 

+ 178
- 0
flask_server/app_sio.py View File

@@ -1,7 +1,9 @@
1 1
 from flask import Flask, render_template
2 2
 from flask_socketio import SocketIO
3 3
 
4
+import flask_socketio
4 5
 import flask
6
+import os
5 7
 
6 8
 app = Flask(__name__,template_folder = r"../js_client")
7 9
 app.config['SECRET_KEY'] = 'secret!'
@@ -27,22 +29,198 @@ def r2(path):
27 29
 @app.route('/<path:path>')
28 30
 def r1(path):
29 31
     p("????,aaaa,...",path)
32
+    if ("shared_libs/jquery-3.5.1.min.js" in path):
33
+        return flask.send_from_directory(r"../js_client", "jquery-3.5.1.min.js")
34
+
30 35
     return flask.send_from_directory(r"../js_client", path)
31 36
     return flask.send_file('../js_client/jquery-3.5.1.min.js')
32 37
     # return flask.send_from_directory('templates', path)
33 38
     return flask.send_from_directory('./', path)
34 39
 
40
+# @socketio.on('connect',namespace="/rx2/")
41
+
42
+
43
+r'''
44
+@socketio.on('connect',namespace="/rx2")
45
+def handle_message_a(*a,**kw):
46
+    print('received connect: ',a,kw)
47
+
48
+@socketio.on('connect',namespace="rx2")
49
+def handle_message_b(*a,**kw):
50
+    print('received connect: ',a,kw)
51
+
52
+@socketio.on('connect',namespace="rx2/")
53
+def handle_message_c(*a,**kw):
54
+    print('received connect: ',a,kw)
55
+@socketio.on('connect',namespace="/rx2/")
56
+def handle_message_d(*a,**kw):
57
+    print('received connect: ',a,kw)
58
+
59
+
60
+
61
+
62
+
63
+
64
+@socketio.on('connect',"/rx2")
65
+def handle_message__a(*a,**kw):
66
+    print('received connect: ',a,kw)
67
+
68
+@socketio.on('connect',"rx2")
69
+def handle_message__b(*a,**kw):
70
+    print('received connect: ',a,kw)
71
+
72
+@socketio.on('connect',"rx2/")
73
+def handle_message__c(*a,**kw):
74
+    print('received connect: ',a,kw)
75
+@socketio.on('connect',"/rx2/")
76
+def handle_message__d(*a,**kw):
77
+    print('received connect: ',a,kw)
78
+
79
+
80
+'''
81
+
82
+# @socketio.onAny('connect',namespace="/rx2")
83
+# def fn1(*a,**kw):
84
+    # p("\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
85
+
86
+
87
+
88
+
89
+# @socketio.on('connect<path>',"/<path:path>")
90
+# @socketio.on('connect',"/<path:path>")
91
+@socketio.on('connect',"/")
92
+def handle_message(*a,**kw):
93
+    print('received connect:?? ',a,kw)
94
+    # p(flask.request.sid)
95
+    #
96
+    # for en in dir(flask.request):
97
+        # p(en)
98
+
99
+    # p(":")
100
+    # p(flask.request.args)
101
+
102
+    # p(flask.request.url)
103
+    room = flask.request.args.get("room","no_room")
104
+    p("+",room)
105
+    join_room(room)
106
+    # p(flask.request.event)
107
+    # p(socketio.server.get_environ())
108
+@socketio.on('disconnect')
109
+def test_disconnect():
110
+    print('Client disconnected')
111
+    room = flask.request.args.get("room","no_room")
112
+    p("}}}}}}}}}}",room)
113
+
114
+
35 115
 
36 116
 @socketio.on('message')
37 117
 def handle_message(data):
38 118
 	print('received message: ' + data)
39 119
 
40 120
 
121
+
122
+@socketio.on('jsync.io2')
123
+def handle_message(data):
124
+    print('received jsync.io message: ' + data)
125
+    room = flask.request.args.get("room","no_room")
126
+    p("io2+",room)
127
+
128
+    # flask_socketio.emit('jsync.io', data, broadcast=True)
129
+    flask_socketio.emit('jsync.io2', data,room=room, broadcast=True)
130
+
131
+
132
+
133
+
134
+@socketio.on('jsync.io')
135
+def handle_message(data):
136
+    print('received jsync.io message: ' + data)
137
+    room = flask.request.args.get("room","no_room")
138
+    p("io+",room)
139
+    # flask_socketio.send(data, to=room)
140
+    flask_socketio.emit('jsync.io2', data+"?", broadcast=True)
141
+
142
+    # flask_socketio.emit('jsync.io', data, broadcast=True)
143
+    # flask_socketio.emit('jsync.io2', data+"?", broadcast=True)
144
+
145
+
146
+@socketio.on('jsync.io.all')
147
+def handle_message(data):
148
+    print('received jsync.io message: ' + data)
149
+    flask_socketio.emit('jsync.io', data, broadcast=True)
150
+    flask_socketio.emit('jsync.io2', data, broadcast=True)
151
+
152
+
153
+
154
+from flask_socketio import join_room, leave_room
155
+@socketio.on('join')
156
+def on_join(data):
157
+    username = data['username']
158
+    room = data['room']
159
+    join_room(room)
160
+    flask_socketio.send(username + ' has entered the room.', to=room)
161
+
162
+@socketio.on('leave')
163
+def on_leave(data):
164
+    username = data['username']
165
+    room = data['room']
166
+    leave_room(room)
167
+    flask_socketio.send(username + ' has left the room.', to=room)
168
+
169
+
170
+
171
+    
172
+
173
+
174
+
41 175
 @socketio.on('json')
42 176
 def handle_json(json):
43 177
 	print('received json: ' + str(json))
44 178
 
45 179
 
180
+# generated by bing seems to work
181
+@app.route("/ldir")
182
+def list_directory():
183
+    orig_path = os.getcwd()
184
+
185
+
186
+    # Get the list of files and directories
187
+    # items = os.listdir(DIRECTORY_PATH)
188
+    os.chdir(app.root_path)
189
+    items = os.listdir("../js_client")
190
+    os.chdir(orig_path)
191
+
192
+    # Filter out hidden files and directories
193
+    items = [item for item in items if not item.startswith(".")]
194
+
195
+    # Create an HTML string with the list of items as links
196
+    html_content = "<h1>Contents of the Directory</h1><ul>"
197
+    html_links = ""
198
+    html_src_links = ""
199
+    other_links = ""
200
+    for item in items:
201
+        p([item])
202
+        if "html" in item:
203
+            html_src_links += f"<li><a href='viewsrc2/{item}'>src:{item}</a></li>"
204
+            html_links += f"<li><a href='{item}'>{item}</a></li>"
205
+        else:
206
+            other_links += f"<li><a href='{item}'>{item}</a></li>"
207
+        # link = (request.path + '/' if request.path != '/' else '') + item
208
+    html_content+=html_links
209
+    html_content+="<br>"
210
+    html_content+=other_links
211
+    html_content+="<br>"
212
+    html_content+="VIEW SRC: its actually < pre >"
213
+    html_content+="<br>"
214
+    html_content+="<br>"
215
+    html_content+=html_src_links
216
+    html_content += "</ul>"
217
+
218
+    # Return the HTML content directly
219
+    return html_content
220
+# end generated by bing
221
+
222
+for en in dir(socketio):
223
+    p("~~",en)
46 224
 
47 225
 
48 226
 if __name__ == '__main__':

+ 209
- 0
js_client/index_sep.html View File

@@ -0,0 +1,209 @@
1
+<html itemscope itemtype="http://schema.org/Product" prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/html">
2
+  <head>
3
+
4
+<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
5
+
6
+
7
+<!-- <script class="win_keys2 win_keys_glob_attrs" src="/ign/j9/dbg/glob_attrs.js?c=00x"></script> -->
8
+
9
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.js"></script>
10
+<script src="/shared_libs/jquery-3.5.1.min.js"></script>
11
+
12
+<!-- <script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script> -->
13
+<!-- 
14
+<script class="rld" src="jsync_dep.js"></script>
15
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
16
+<script class="rld" src="jsync_ord.js"></script>
17
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
18
+<script class="rld" src="jsync_ws.js"></script>
19
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
20
+<script class="rld" src="jsync_sto.js"></script>
21
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
22
+<script class="rld" src="jsync_init.js"></script>
23
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
24
+<script class="rld" src="jsync_test.js"></script>
25
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
26
+<script class="rld" src="jsync_demo.js"></script>
27
+ -->
28
+
29
+
30
+
31
+<!-- 
32
+<script class="rld" src="/ign/indx/jsyncdb/jsync_dep.js"></script>
33
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
34
+<script class="rld" src="/ign/indx/jsyncdb/jsync_ord.js"></script>
35
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
36
+<script class="rld" src="/ign/indx/jsyncdb/jsync_ws.js"></script>
37
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
38
+<script class="rld" src="/ign/indx/jsyncdb/jsync_sto.js"></script>
39
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
40
+<script class="rld" src="/ign/indx/jsyncdb/jsync_init.js"></script>
41
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
42
+<script class="rld" src="/ign/indx/jsyncdb/jsync_test.js"></script>
43
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
44
+<script class="rld" src="/ign/indx/jsyncdb/jsync_demo.js"></script>
45
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
46
+ -->
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+<!-- <script class="rld" type="module" src="/ign/indx/jsyncdb/jsync_lib.js"></script> -->
55
+
56
+
57
+
58
+<!-- <script class="rld" src="/jsync_lib.js"></script> -->
59
+<script class="rld" src="/jsync_dep.js"></script>
60
+
61
+<script class="rld" src="/jsync_ord.js"></script>
62
+
63
+<script class="rld" src="/jsync_ws.js"></script>
64
+
65
+<script class="rld" src="/jsync_sto.js"></script>
66
+
67
+<script class="rld" src="/jsync_init.js"></script>
68
+
69
+<script class="rld" src="/jsync_test.js"></script>
70
+
71
+<!-- <script class="rld" src="/jsync_demo.js"></script> -->
72
+
73
+
74
+
75
+<script class="rld" src="/io_misc1.js"></script>
76
+<script class="rld" src="/jsync_io_demo.js"></script>
77
+
78
+
79
+    <script src="https://rld.jfidev.com/ign/j7/rldjs/rldjs5.js?v=139"></script>
80
+    <script class="rld rrld" src="https://rld.jfidev.com/ign/rls.js?c=00x"></script>
81
+    <script class="rld rrld_u" src="https://rld.jfidev.com/ign/rls_u.js?c=c50fb605ecc3903a40c4b4e8a41ab12c"></script>
82
+
83
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsync_info.js"></script>
84
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr0.js"></script>
85
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr1.js"></script>
86
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr2.js"></script>
87
+
88
+<script class="rld" src="/jsync_2nd_db.js"></script>
89
+<script class="rld" src="/jsync_test2.js"></script>
90
+<script class="rld" src="/ev_inc.js"></script>
91
+
92
+
93
+<style type="text/css">
94
+
95
+
96
+</style>
97
+ <link  class="rld" rel="stylesheet" href="/jsync_demo.css">
98
+  <link  class="rld" rel="stylesheet" href="/ev_inc.css">
99
+
100
+
101
+<script type="text/javascript">
102
+  function hide_demo(argument) {
103
+    // clog("hide_demo")
104
+    $(".show_demo").removeClass("show_demo").addClass("hide_demo")
105
+
106
+  }
107
+  function show_demo(argument) {
108
+    // clog("show_demo")
109
+    // body...
110
+    $(".hide_demo").removeClass("hide_demo").addClass("show_demo")
111
+  }
112
+
113
+function evl_btn_h(event,node){
114
+  _evl_btn_h(...arguments)
115
+
116
+}
117
+function eval_h(event,node){
118
+  _eval_h(...arguments)
119
+}
120
+
121
+
122
+</script>
123
+
124
+
125
+</head>
126
+
127
+<body>
128
+
129
+<div id="root_div">
130
+  <span class="iblock_2"></span>
131
+  <span class="iblock_1"></span>
132
+</div>
133
+<div class="json_container show_demo">
134
+  <button class="demo_hide_btn" onclick="hide_demo()">hide demo</button>
135
+  <button class="demo_show_btn" onclick="show_demo()">show demo</button><br>
136
+  <span class="color_legend">
137
+    
138
+  <span class="wperm2">green: </span>you have write access<br>
139
+  <span class="wperm">orange: </span>you don't have write access<br>
140
+  <span >black: </span>everyone has write access<br>
141
+  </span>
142
+  <!-- <div class="db_disp"></div> -->
143
+  <code class="db_disp"></code>
144
+&#8595; eval m.a={} {enter} &#8595;
145
+<!-- <br>  <textarea class="eval_txt" onkeypress="eval_h(event,this)"></textarea> -->
146
+<span class="evl_cnt">
147
+  
148
+<br>  <textarea class="eval_txt" onkeyup="evl_btn_h(event,this)" data-ev_type="keyup"></textarea> 
149
+<span class="btn_cnt">
150
+  
151
+<button class="evl_btn evl_btn1" data-ev_type="b" data-btn-type="b" onclick="evl_btn_h(event,this)"><</button>
152
+<button class="evl_btn evl_btn2" data-ev_type="f" data-btn-type="f" onclick="evl_btn_h(event,this)">></button>
153
+<button class="evl_btn evl_btn3" data-ev_type="e" data-btn-type="e" onclick="evl_btn_h(event,this)">eval</button>
154
+</span>
155
+</span>
156
+<br>
157
+<code class="eval_result"></code>
158
+
159
+</div>
160
+<div id="oops_i_lied"><div class="code_container">
161
+  in this demo the global variable msto_prx is the root of the database.
162
+we will use the global variable msto because it is a little nicer (has shortcuts to the parts you have exclusive write permissions to).
163
+
164
+<b>open devtools on two pages connected to the same database to begin</b>
165
+to get a copy of the datastructure without the Proxies:
166
+<code>jc(msto)</code><div class="hidden-boundary"></div>
167
+
168
+ set values<code>
169
+
170
+msto.key = "value"<div class="hidden-boundary"></div>
171
+
172
+  msto.example = {
173
+    str:"these are supported data types",
174
+    number:12.7,
175
+    bool:true,
176
+    arr:["val0",1,{z:1},["a","b"]],
177
+    obj:{d:"there is a max depth of 15"},
178
+    str2:"null isn't fully supported yet and can break things",
179
+  }
180
+</code>
181
+  you can paste this shorter statement to avoid newlines in your devtools history :)
182
+
183
+<code>msto.example={str:"str_val",bool:true,number:12.7,arr:["val0",1,{z:2},["a","b"]],obj:{d:"depth 2?"},str2:"another string"}</code><div class="hidden-boundary"></div>
184
+get values
185
+  <code>
186
+msto.example.arr[0]<div class="hidden-boundary"></div>
187
+// "val0"
188
+
189
+msto.example.arr[2]<div class="hidden-boundary"></div>
190
+// {z:2}</code>
191
+the datastructure should have syncronized msto & msto_prx on both webpages 
192
+<span class="db_desc">
193
+values can be strings, numbers, booleans, objects or arrays
194
+null and undefined are not supported yet
195
+local changes are immediate
196
+and deletes are local only (for now)
197
+after a value is set is pushed to everyone else who is connected
198
+
199
+msto.ws_channels and msto.participants are write protected 
200
+msto.my_data links to the path you have write access to as does msto.my_channel
201
+participants and channels write only data are automatically deleted after they leave
202
+the data is not persistent it exists in the webpages of those connected
203
+if everyone leaves a room the datastructure is destroyed
204
+
205
+
206
+</span></div></div>
207
+
208
+</body>
209
+</html>

+ 198
- 0
js_client/index_v5s.html View File

@@ -0,0 +1,198 @@
1
+<html itemscope itemtype="http://schema.org/Product" prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/html">
2
+  <head>
3
+
4
+<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
5
+
6
+
7
+<!-- <script class="win_keys2 win_keys_glob_attrs" src="/ign/j9/dbg/glob_attrs.js?c=00x"></script> -->
8
+
9
+
10
+<script src="/shared_libs/jquery-3.5.1.min.js"></script>
11
+
12
+<!-- <script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script> -->
13
+<!-- 
14
+<script class="rld" src="jsync_dep.js"></script>
15
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
16
+<script class="rld" src="jsync_ord.js"></script>
17
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
18
+<script class="rld" src="jsync_ws.js"></script>
19
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
20
+<script class="rld" src="jsync_sto.js"></script>
21
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
22
+<script class="rld" src="jsync_init.js"></script>
23
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
24
+<script class="rld" src="jsync_test.js"></script>
25
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>
26
+<script class="rld" src="jsync_demo.js"></script>
27
+ -->
28
+
29
+
30
+
31
+<!-- 
32
+<script class="rld" src="/ign/indx/jsyncdb/jsync_dep.js"></script>
33
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
34
+<script class="rld" src="/ign/indx/jsyncdb/jsync_ord.js"></script>
35
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
36
+<script class="rld" src="/ign/indx/jsyncdb/jsync_ws.js"></script>
37
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
38
+<script class="rld" src="/ign/indx/jsyncdb/jsync_sto.js"></script>
39
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
40
+<script class="rld" src="/ign/indx/jsyncdb/jsync_init.js"></script>
41
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
42
+<script class="rld" src="/ign/indx/jsyncdb/jsync_test.js"></script>
43
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
44
+<script class="rld" src="/ign/indx/jsyncdb/jsync_demo.js"></script>
45
+<script class="win_keys" src="/ign/j9/dbg/win_keys.js?c=00x"></script>                             
46
+ -->
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+<!-- <script class="rld" type="module" src="/ign/indx/jsyncdb/jsync_lib.js"></script> -->
55
+
56
+
57
+
58
+<!-- <script class="rld" src="/jsync_lib.js"></script> -->
59
+<script class="rld" src="/jsync_dep.js"></script>
60
+
61
+<script class="rld" src="/jsync_ord.js"></script>
62
+
63
+<script class="rld" src="/jsync_ws.js"></script>
64
+
65
+<script class="rld" src="/jsync_sto.js"></script>
66
+
67
+<script class="rld" src="/jsync_init.js"></script>
68
+
69
+<script class="rld" src="/jsync_test.js"></script>
70
+
71
+<!-- <script class="rld" src="/jsync_demo.js"></script> -->
72
+
73
+
74
+
75
+<script class="rld" src="/jsync_demo.js"></script>
76
+
77
+<script class="rld" src="/jsync_2nd_db.js"></script>
78
+<script class="rld" src="/jsync_test2.js"></script>
79
+<script class="rld" src="/ev_inc.js"></script>
80
+
81
+
82
+<style type="text/css">
83
+
84
+
85
+</style>
86
+ <link  class="rld" rel="stylesheet" href="/jsync_demo.css">
87
+  <link  class="rld" rel="stylesheet" href="/ev_inc.css">
88
+
89
+
90
+<script type="text/javascript">
91
+  function hide_demo(argument) {
92
+    // clog("hide_demo")
93
+    $(".show_demo").removeClass("show_demo").addClass("hide_demo")
94
+
95
+  }
96
+  function show_demo(argument) {
97
+    // clog("show_demo")
98
+    // body...
99
+    $(".hide_demo").removeClass("hide_demo").addClass("show_demo")
100
+  }
101
+
102
+function evl_btn_h(event,node){
103
+  _evl_btn_h(...arguments)
104
+
105
+}
106
+function eval_h(event,node){
107
+  _eval_h(...arguments)
108
+}
109
+
110
+
111
+</script>
112
+
113
+
114
+</head>
115
+
116
+<body>
117
+
118
+<div id="root_div">
119
+  <span class="iblock_2"></span>
120
+  <span class="iblock_1"></span>
121
+</div>
122
+<div class="json_container show_demo">
123
+  <button class="demo_hide_btn" onclick="hide_demo()">hide demo</button>
124
+  <button class="demo_show_btn" onclick="show_demo()">show demo</button><br>
125
+  <span class="color_legend">
126
+    
127
+  <span class="wperm2">green: </span>you have write access<br>
128
+  <span class="wperm">orange: </span>you don't have write access<br>
129
+  <span >black: </span>everyone has write access<br>
130
+  </span>
131
+  <!-- <div class="db_disp"></div> -->
132
+  <code class="db_disp"></code>
133
+&#8595; eval m.a={} {enter} &#8595;
134
+<!-- <br>  <textarea class="eval_txt" onkeypress="eval_h(event,this)"></textarea> -->
135
+<span class="evl_cnt">
136
+  
137
+<br>  <textarea class="eval_txt" onkeyup="evl_btn_h(event,this)" data-ev_type="keyup"></textarea> 
138
+<span class="btn_cnt">
139
+  
140
+<button class="evl_btn evl_btn1" data-ev_type="b" data-btn-type="b" onclick="evl_btn_h(event,this)"><</button>
141
+<button class="evl_btn evl_btn2" data-ev_type="f" data-btn-type="f" onclick="evl_btn_h(event,this)">></button>
142
+<button class="evl_btn evl_btn3" data-ev_type="e" data-btn-type="e" onclick="evl_btn_h(event,this)">eval</button>
143
+</span>
144
+</span>
145
+<br>
146
+<code class="eval_result"></code>
147
+
148
+</div>
149
+<div id="oops_i_lied"><div class="code_container">
150
+  in this demo the global variable msto_prx is the root of the database.
151
+we will use the global variable msto because it is a little nicer (has shortcuts to the parts you have exclusive write permissions to).
152
+
153
+<b>open devtools on two pages connected to the same database to begin</b>
154
+to get a copy of the datastructure without the Proxies:
155
+<code>jc(msto)</code><div class="hidden-boundary"></div>
156
+
157
+ set values<code>
158
+
159
+msto.key = "value"<div class="hidden-boundary"></div>
160
+
161
+  msto.example = {
162
+    str:"these are supported data types",
163
+    number:12.7,
164
+    bool:true,
165
+    arr:["val0",1,{z:1},["a","b"]],
166
+    obj:{d:"there is a max depth of 15"},
167
+    str2:"null isn't fully supported yet and can break things",
168
+  }
169
+</code>
170
+  you can paste this shorter statement to avoid newlines in your devtools history :)
171
+
172
+<code>msto.example={str:"str_val",bool:true,number:12.7,arr:["val0",1,{z:2},["a","b"]],obj:{d:"depth 2?"},str2:"another string"}</code><div class="hidden-boundary"></div>
173
+get values
174
+  <code>
175
+msto.example.arr[0]<div class="hidden-boundary"></div>
176
+// "val0"
177
+
178
+msto.example.arr[2]<div class="hidden-boundary"></div>
179
+// {z:2}</code>
180
+the datastructure should have syncronized msto & msto_prx on both webpages 
181
+<span class="db_desc">
182
+values can be strings, numbers, booleans, objects or arrays
183
+null and undefined are not supported yet
184
+local changes are immediate
185
+and deletes are local only (for now)
186
+after a value is set is pushed to everyone else who is connected
187
+
188
+msto.ws_channels and msto.participants are write protected 
189
+msto.my_data links to the path you have write access to as does msto.my_channel
190
+participants and channels write only data are automatically deleted after they leave
191
+the data is not persistent it exists in the webpages of those connected
192
+if everyone leaves a room the datastructure is destroyed
193
+
194
+
195
+</span></div></div>
196
+
197
+</body>
198
+</html>

+ 123
- 0
js_client/io_misc1.js View File

@@ -0,0 +1,123 @@
1
+function html_info(){
2
+	var get_room_name = window.get_room_name || glob_u.fns.get_room_name
3
+
4
+	window?.rldi?.setint?.(400)
5
+	var domain_prefix = location.hostname.split(".").slice(0,-2).join(".")
6
+	var root_div= document.querySelector("#root_div")
7
+	root_div.innerHTML=""
8
+	var n =document.createElement("SPAN",{})
9
+	n.innerHTML = `<div>${domain_prefix}</div><div>room name: ${get_room_name()}</div>
10
+<div><span>jsyncdb:</span><span id="jsyncdb_state">uninitialized</span></div>
11
+	`
12
+	root_div.append(n)
13
+}
14
+
15
+
16
+function ds_test2(){
17
+	// clog("ds_test2!")
18
+	// window.ds_test ?ds_test():glob_u.fns.ds_test()
19
+	jsyncdb_init_helper()
20
+	// glob_u.fns.ds_test
21
+	// ds_test()
22
+}
23
+
24
+
25
+// 
26
+
27
+
28
+function jsyncdb_init_helper(){
29
+	// clog("WS_HELPER")
30
+	var fns = window.glob_u.ws.fns
31
+	var room_name=glob_u.fns.get_room_name()
32
+	// z2="z"
33
+
34
+	let ws_protocol = "wss:"
35
+	location.protocol == "https:" ?  "was already set to wss:" : ws_protocol = "ws:"
36
+	var port = location.port || "5000"
37
+
38
+	// location.protocol ? 
39
+
40
+	var o = {
41
+
42
+		include_participants_data:1, 
43
+		include_ws_channel_data:1, // required for participants_data to work
44
+		// msto.participants and msto.ws_channels will be defined in either case so we don't need to handle cases where some users enable this and some don't
45
+		AutoReconnect:false,
46
+
47
+
48
+		// the following options attributes 
49
+
50
+
51
+		url:'wss://' + window.location.hostname  +`/djc_srv/ws/chat/${room_name}`,
52
+		url: `wss://${location.hostname}:${port}/echo_c1${location.search}`,
53
+		url: `${ws_protocol}//${location.hostname}:${port}/echo_c1${location.search}`,
54
+		// url: `${ws_protocol}//${location.hostname}:5000/echo${location.search}`,
55
+		// url: `${ws_protocol}//${location.hostname}:5000/echo_all${location.search}`,
56
+		// o.url = 
57
+		socket_name:"ws1",
58
+		ord:glob_u.cb.ws,
59
+
60
+
61
+		methods:{
62
+		onmessage:fns.onmessage,
63
+		onclose:fns.onclose,
64
+		onerror:fns.onerror,
65
+		onopen:fns.onopen,
66
+		},
67
+
68
+
69
+		fns:{
70
+
71
+
72
+		},
73
+	}
74
+
75
+	var socket = window.glob_u.fns.connect_ws(o)
76
+	// clog({socket})
77
+}
78
+
79
+
80
+
81
+
82
+
83
+// if 
84
+
85
+window.dev_flag = 1
86
+addEventListener("load",html_info)
87
+
88
+// addEventListener("load",ds_test2)
89
+
90
+
91
+function update_ui(o,scope,info){
92
+	var clog =console.log
93
+	clog("update_ui",{o,scope,info})
94
+	// hard coding stuff that will probably change here
95
+	switch(info.hkey) {
96
+		case "WS_OPEN:":
97
+		$("#jsyncdb_state").text("connecting...")
98
+		break;
99
+		case "WS_CLOSE:":
100
+		$("#jsyncdb_state").text("disconnected")
101
+		break;
102
+		case "WS_MSTO_INITED":
103
+		$("#jsyncdb_state").text("connected")
104
+		break;
105
+		default:
106
+	}
107
+ 
108
+
109
+}
110
+
111
+// function get_room_name() {
112
+// 	// return "room/name"
113
+// 	return "room_name"
114
+// }
115
+
116
+glob_u.cb.ws.reg_cb(update_ui,"WS_OPEN:","update_ui")
117
+glob_u.cb.ws.reg_cb(update_ui,"WS_CLOSE:","update_ui")
118
+glob_u.cb.ws.reg_cb(update_ui,"WS_MSTO_INITED","update_ui")
119
+
120
+// addEventListener("load",db_display)
121
+
122
+// msto.example = {key:"val",z:"undefined"}
123
+// clog("??")

+ 4
- 0
js_client/jsync_demo_db_only.js View File

@@ -13,8 +13,10 @@ function jsyncdb_init_helper(){
13 13
 	var room_name=glob_u.fns.get_room_name()
14 14
 
15 15
 	let ws_protocol = "wss:"
16
+	var port = location.port || "5000"
16 17
 	location.protocol == "https:" ?  "was already set to wss:" : ws_protocol = "ws:"
17 18
 
19
+
18 20
 	var o = {
19 21
 
20 22
 		include_participants_data:1, 
@@ -28,6 +30,8 @@ function jsyncdb_init_helper(){
28 30
 		
29 31
 		url:'wss://' + window.location.hostname  +`/djc_srv/ws/chat/${room_name}`,
30 32
 		url: `${ws_protocol}//${location.hostname}:5000/echo_c1${location.search}`,
33
+		url: `${ws_protocol}//${location.hostname}:${port}/echo_c1${location.search}`,
34
+
31 35
 		socket_name:"ws1",
32 36
 		ord:glob_u.cb.ws,
33 37
 

+ 4
- 0
js_client/jsync_info.js View File

@@ -0,0 +1,4 @@
1
+
2
+clog("JSYNC INFO PLACEHOLDER")
3
+
4
+// get_ord_info()

+ 5
- 2
js_client/jsync_init.js View File

@@ -143,7 +143,8 @@ var DBL_Proxy = {
143 143
 
144 144
 
145 145
 function init_db(objx){
146
-	// clog("init_db~")
146
+	clog("init_db~",arguments,this)
147
+	console.trace("init_db")
147 148
 	trc_sto("init_db",{})
148 149
 	glob_u.prom.init_db_resolve.resolved=1
149 150
 	var glob_mx = glob_u.data
@@ -241,7 +242,8 @@ function handle_pre_init_msgs(){
241 242
 	var k,v,i
242 243
 	var _o
243 244
 	glob_u.prom.init_db_resolve.resolved_inited = 1
244
-	for (v of glob_u.ws.sockets.ws1.pre_init_msgs){
245
+	// TODOL FIX HARDCODEING
246
+	for (v of glob_u.ws.sockets.ws1?.pre_init_msgs || []){
245 247
 		if (v.data.sto_event_type == "set_msg"){
246 248
 			msto.my_data.rehandle=1
247 249
 			_o={...v,data:jc(v.data)}
@@ -265,6 +267,7 @@ function init_mu(){
265 267
 	var k,v
266 268
 
267 269
 	var rr = {}
270
+	console.trace("init_mu")
268 271
 	var prom1 = new Promise(pfnf(rr));
269 272
 	prom1.then(init_db).then(ws_sto_connected)
270 273
 	glob_u.prom.init_db_resolve_timeout_arg = {aaa:"timedout",pl:msto_z}

+ 103
- 0
js_client/jsync_io_demo.js View File

@@ -0,0 +1,103 @@
1
+
2
+
3
+
4
+
5
+
6
+function on_sio_msg(){
7
+	clog("on_sio_msg",arguments,this)
8
+
9
+}
10
+function on_jio_msg(msg){
11
+	clog("on_jio_msg",arguments,this)
12
+	var scope="PLACEHOLDER_scope" 
13
+	var info="PLACEHOLDER_info" 
14
+	var _o={
15
+		msg,
16
+		data:JSON.parse(msg),
17
+	} 
18
+	mhndlr_rld_2(_o,scope,info)
19
+
20
+}
21
+function onAny(){
22
+	clog("onAny",arguments,this)
23
+
24
+}
25
+function on_sio_open(){
26
+	clog("on_sio_open",arguments,this)
27
+}
28
+
29
+function get_room_name(){
30
+	// return 
31
+	var s=location.search
32
+	// if s[0]=="?"){}
33
+	s[0]=="?" ?  s = s.slice(1):0
34
+	var param
35
+	for (param of s.split("&")){
36
+
37
+		let kv = param.split("=")
38
+		if (kv[0]=="room"){
39
+			return kv[1]
40
+		}
41
+		clog("::",param,kv)
42
+		// clog("::",param,kv,"")
43
+	}
44
+return "rx1"
45
+}
46
+
47
+function create_sio_conn(){
48
+	var conn = {
49
+
50
+	}
51
+	// var socket = io.connect('http://' + document.domain + ':' + location.port + "/echo");
52
+	// namespace
53
+	opts = {
54
+		// path:"rx2",
55
+
56
+		"qstr":"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ"
57
+	}
58
+	var socket = io.connect('http://' + document.domain + ':' + location.port + `?room=${get_room_name()}`,opts);
59
+	// var socket = io.connect('http://' + document.domain + ':' + location.port + `?room=z`,opts);
60
+	// var socket = io.connect('http://' + document.domain + ':' + location.port ,opts);
61
+	conn.socket = socket
62
+
63
+        socket.on('connect', on_sio_open);
64
+        socket.on('response', on_sio_msg);
65
+        socket.on('jsync.io', on_jio_msg);
66
+        socket.on('jsync.io2', on_jio_msg);
67
+        socket.on('message', on_sio_msg);
68
+        socket.onAny( onAny);
69
+
70
+
71
+	return conn
72
+
73
+}
74
+// mhndlr_rld_2
75
+function tmsgx4(m){
76
+	var socket = glob_u.ws.sockets.ws1
77
+	// var jsend = socket.params.fns.jsend
78
+	var t = {
79
+		key:"tmp_dev_sto",
80
+	}
81
+	glob_u.fns.merge_partial_template(m,t)
82
+	// clog("tmsgx4",{key:m.key,sto_event_type:m.sto_event_type,CLIENT_KEY:m.CLIENT_KEY},{m,t})
83
+	trc_sto("tmsgx4",m)
84
+
85
+	// jsend(m)
86
+	// JSON.stringify(m)
87
+	// glob_u.ws.sockets.sio1.socket.emit("jsync.io",JSON.stringify(m))
88
+	glob_u.ws.sockets.sio1.socket.emit("jsync.io2",JSON.stringify(m))
89
+	// glob_u.ws.sockets.sio1.socket.emit("jsync.io.all",JSON.stringify(m))
90
+
91
+}
92
+
93
+
94
+
95
+
96
+window.glob_u.ws = window.glob_u.ws || {
97
+	sockets:{},
98
+	fns:{},
99
+	flags:{},
100
+} 
101
+
102
+
103
+glob_u.ws.sockets.sio1 = create_sio_conn()

+ 6
- 2
js_client/jsync_lib.js View File

@@ -545,6 +545,7 @@ function create_ws_ord(){
545 545
 window.glob_u.ws.fns.dispatch = function dispatch(o,obj_x,info){
546 546
 	var event = o.event
547 547
 	// socket = o.that
548
+	// clog("jtx dispatch",{o,obj_x,info,that:this})
548 549
 	var data = JSON.parse(event.data)
549 550
 	// clog("WS_dispatch",data,socket.params.ord,data["CLIENT_KEY"])
550 551
 	// clog("trc:sto:ws_rec",data.CLIENT_KEY,data.sto_event_type,data)
@@ -687,6 +688,7 @@ glob_u.cb.ws.reg_cb(window.glob_u.ws.fns.dispatch,"WS_MESSAGE:","WS_MESSAGE")
687 688
 var Proxy_Permissions,Proxy_Factory
688 689
 
689 690
 function mhndlr_rld_2(_o,scope,info){
691
+	// clog("jtx mhndlr_rld_2",{_o,scope,info,that:this})
690 692
 	var dlog =nop
691 693
 	try {
692 694
 		var parsed = _o.data
@@ -699,7 +701,8 @@ function mhndlr_rld_2(_o,scope,info){
699 701
 		switch (parsed.sto_event_type){
700 702
 			case "set_msg":
701 703
 			// if (!glob_u.prom.init_db_resolve.resolved){
702
-			if (!glob_u.prom.init_db_resolve.resolved_inited){
704
+			// if (!glob_u.prom.init_db_resolve.resolved_inited){
705
+			if (!glob_u.prom.init_db_resolve.resolved_inited && _o?.event?.target?.pre_init_msgs){
703 706
 				_o.event.target.pre_init_msgs.push(_o)
704 707
 			}
705 708
 				pf._set_recv(o.path,o.key,o.val)
@@ -1228,6 +1231,7 @@ var DBL_Proxy = {
1228 1231
 
1229 1232
 function init_db(objx){
1230 1233
 	// clog("init_db~")
1234
+	console.trace("init_db")
1231 1235
 	trc_sto("init_db",{})
1232 1236
 	glob_u.prom.init_db_resolve.resolved=1
1233 1237
 	var glob_mx = glob_u.data
@@ -1321,7 +1325,7 @@ window.msto=new Proxy(msto_prx, DBL_Proxy)
1321 1325
 
1322 1326
 
1323 1327
 function handle_pre_init_msgs(){
1324
-	// clog("handle_pre_init_msgs")
1328
+	clog("handle_pre_init_msgs")
1325 1329
 	var k,v,i
1326 1330
 	var _o
1327 1331
 	glob_u.prom.init_db_resolve.resolved_inited = 1

+ 2
- 1
js_client/jsync_sto.js View File

@@ -14,7 +14,7 @@ function mhndlr_rld_2(_o,scope,info){
14 14
 		switch (parsed.sto_event_type){
15 15
 			case "set_msg":
16 16
 			// if (!glob_u.prom.init_db_resolve.resolved){
17
-			if (!glob_u.prom.init_db_resolve.resolved_inited){
17
+			if (!glob_u.prom.init_db_resolve.resolved_inited && _o?.event?.target?.pre_init_msgs){
18 18
 				_o.event.target.pre_init_msgs.push(_o)
19 19
 			}
20 20
 				pf._set_recv(o.path,o.key,o.val)
@@ -217,6 +217,7 @@ Proxy_Factory = class Proxy_Factory {
217 217
 	}
218 218
 
219 219
 	_set_recv(path,prop,val,id){
220
+		console.trace("_set_recv",{path,prop,val,id})
220 221
 
221 222
 		var p = path
222 223
 		var nprop = deep_prop_v0(this.root,p)

+ 14
- 1
js_client/sto_only.html View File

@@ -8,6 +8,7 @@
8 8
 
9 9
 
10 10
 <!-- <script src="/shared_libs/jquery-3.5.1.min.js"></script> -->
11
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.js"></script>
11 12
 <script src="/jquery-3.5.1.min.js"></script>
12 13
 
13 14
 
@@ -18,8 +19,20 @@
18 19
 <script class="rld" src="/jsync_dep.js"></script>
19 20
 <script class="rld" src="/jsync_t1.js"></script>
20 21
 <script class="rld" src="/jsync_sto.js"></script>
21
-<script class="rld" src="/jsync_init.js"></script>
22
+<!-- <script class="rld" src="/jsync_init.js"></script> -->
22 23
 
24
+<!-- <script class="rld" src="/io_misc1.js"></script> -->
25
+<script class="rld" src="/jsync_io_demo.js"></script>
26
+
27
+
28
+
29
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsync_info.js"></script>
30
+
31
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsto0.js"></script>
32
+
33
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr0.js"></script>
34
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr1.js"></script>
35
+<script class="rld" src="https://jfidev.com/ign/indx/jsyncdb/qflask/jsr2.js"></script>
23 36
 
24 37
 
25 38
 

Loading…
Cancel
Save