123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- // FILE:DS0
- var Proxy_Permissions,Proxy_Factory
-
- function mhndlr_rld_2(_o,scope,info){
- var dlog =nop
- try {
- var parsed = _o.data
- var o = parsed.payload
- // clog("mhndlr_rld",parsed.sto_event_type,parsed,{_o,scope,info})
- if (window.mhndlr_rld_dbg){
- mhndlr_rld_dbg({m,that,n,parsed,ai,o,arguments})
- }
-
- switch (parsed.sto_event_type){
- case "set_msg":
- // if (!glob_u.prom.init_db_resolve.resolved){
- if (!glob_u.prom.init_db_resolve.resolved_inited){
- _o.event.target.pre_init_msgs.push(_o)
- }
- pf._set_recv(o.path,o.key,o.val)
- // clog("msto_evh?ord")
- glob_u.fns.msto_evh ? glob_u.fns.msto_evh(o,parsed) : 0
-
- break;
- case "group_count":
- // clog("mhndlr_rld group_count",parsed)
- if (parsed.group_count < 2){
- // clog("mhndlr_rld group_count RESOLVE")
- glob_u.prom.init_db_resolve(glob_u.prom.init_db_resolve_timeout_arg)
-
- }
- break;
- case "event":
- /*
- dlog("~event~",parsed)
- if (window.dispatch_events){
- dispatch_events({parsed,ai,m,that})
- }
- */
- break;
- case "msg_test":
- dlog("msg_test",parsed)
- break;
- case "db_sync_request":
- // tmsgx4({sto_event_type:"db_sync_response",payload:pf.root,"CLIENT_KEY":"ws_sto"})
- // if (glob_u.prom.init_db_resolve.resolved){
- if (glob_u.prom.init_db_resolve.resolved_inited == 2){
-
- tmsgx4({sto_event_type:"db_sync_response",payload:jc(pf.root),request_from:parsed.from,request_rn_from:parsed.request_rn,"CLIENT_KEY":"ws_sto"})
- }
-
- break;
- case "db_sync_response":
-
- if (glob_u.prom.init_db_resolve && parsed.request_rn_from == glob_u.prom.init_db_resolve.rn){
- glob_u.prom.init_db_resolve({aaa:"dsr",pl:parsed.payload})
- }
- // clog("db_sync_response",parsed)
- break;
-
- }
- } catch (err) {
- clog("mhndlr err:",err)
- }
- }
-
-
- glob_u.fns.msto_evh = function(o,parsed,ai,id){
- // clog("ord_msto_evh")
- if (o.path[0]!="conference" || o.path[1]!="events"){
- return
- }
- glob_u.cb.ws.STO_EVENT.run_cbs(":STO_EVENT",{o,parsed,ai,id})
- if (typeof(o.val) == "object"){
- glob_u.cb.ws.STO_EVENT.run_cbs(o.val.type,{o,parsed,ai,id})
- }
- }
-
- glob_u.cb.ws.reg_cb(mhndlr_rld_2,"WS_MESSAGE:ws_sto","WS_MESSAGE:ws_sto")
-
-
-
-
-
-
-
-
- // FILE:DS1
-
-
-
-
-
-
- var dlog = nop
-
- function tmsgx4(m){
- var socket = glob_u.ws.sockets.ws1
- var jsend = socket.params.fns.jsend
- var t = {
- key:"tmp_dev_sto",
- }
- glob_u.fns.merge_partial_template(m,t)
- // clog("tmsgx4",{key:m.key,sto_event_type:m.sto_event_type,CLIENT_KEY:m.CLIENT_KEY},{m,t})
- trc_sto("tmsgx4",m)
- jsend(m)
- }
-
-
- isProxy = Symbol("isProxy")
-
-
- tlu = {
- object:"",
- string:true,
- number:true,
- undefined:true,
- boolean:true,
- }
-
-
-
-
- function type_info(o){
- try {
-
- var t
- var flags = {
- leaf:false,
- deep_not_prx:false,
- prx:false,
- isObj:false,
- isArr:false,
- els:false,
- }
- t = typeof(o)
- flags.t=t
- if (!(o === null)){
- flags.isArr = Array.isArray(o)
- flags.isObj = Object.prototype == o.__proto__
- }
-
- if (tlu[t] === true || o === null){
- flags.leaf = true
- } else if (t == "object" && o.__prx){
- flags.prx = true
- } else if (t == "object" && (flags.isArr || flags.isObj)){
- flags.prx = false
- flags.deep_not_prx = true
- } else {
- clog("ELSE")
- flags.els = true
- }
- return flags
- } catch (err){
- clog("type_info err:",err,{flags,o})
- }
- }
-
-
- function deep_prop_v0(o,p){
- try {
- var arr = jc(p)
- var ret = o
- while (arr.length){
- ret = ret[arr.shift()]
- }
- return ret
- } catch(err){console.error("DEEP_PROP ERR:",err)}
- }
-
-
-
-
- // delete Proxy_Factory
- // {
-
- Proxy_Factory = class Proxy_Factory {
- constructor(o,n="dflt"){
- this.db = o
- this.n = n
- this.hidden_props = ["add_proxy","_set","walker","walker_start","prxy"]
- this._pub_cb =[]
- this.__prx = true
- this.SymPrx = Symbol("SymPrx")
- }
- init(o){
- this.root = o
- }
- sync(o){
- this.root = jc(o.root)
- o._pub_cb.push(this._set_recv.bind(this))
- }
- get prxy(){
- return this
- }
-
- _set(o,k,v,prx,a0){
- this.obj[k]=prx
- }
- set_pub(obj, prop, val,receiver){
- this._set_pub(obj.__path_arr, prop, jx(val))
- }
- _set_pub(path,key,val){
- var k,v
- var arg = {
- "CLIENT_KEY":"ws_sto",
- "sto_event_type":"set_msg",
- "payload":{path,key,val},}
-
- tmsgx4(arg,
- )
- for (v of this._pub_cb){
- v(path,key,val)
-
- }
- }
-
- _set_recv(path,prop,val,id){
-
- var p = path
- var nprop = deep_prop_v0(this.root,p)
- var dpth = nprop.__dpth
- if (tlu[typeof(val)]){
- nprop._set(nprop,prop,val,val)
- } else {
- nprop._set(nprop,prop,val,new Proxy(val,this))
- nprop[prop].add_proxy(nprop,prop,val,dpth+1)
- }
- this.walker(nprop[prop],{},dpth+2)
- }
-
- set(obj, prop, val,receiver){
- if (obj[prop] === val){
- return Reflect.set(...arguments)
- }
-
- this.set_pub(obj, prop, val,receiver)
- this.event_proc("set")
-
- if ("__prx" == prop){
- this.__prx=val
- return this.__prx
- }
-
- if (typeof(val) === "object" && val != null && !(val.__prx)){
- var ret = Reflect.set(...arguments)
- this.set_obj(obj, prop, val,receiver)
- return ret
- }
-
- return Reflect.set(...arguments)
- }
- get(obj, prop,receiver){
- if (this.hidden_props.includes(prop)){
- switch (prop){
- case "add_proxy":
- return this.add_proxy.bind(this)
- break;
- case "prxy":
- return this
- case "_set":
- return this._set.bind({that:this,obj, prop,receiver})
- case "walker_start":
- return this.walker_start
- case "walker":
- return this.walker
- break;
- }
- }
-
- if (isProxy == prop){ return true }
- if ("__prx" == prop){ return this.__prx }
-
- return Reflect.get(...arguments)
- }
- add_proxy(o,k,v,dpth){
- var xpath = o.__path
- var apath = o.__path_arr
- this.event_proc("add_proxy")
- if (!apath){
- apath=[]
- }
-
- if (!xpath){
- xpath="ROOT!"
- }
-
- Object.defineProperty(v,"__path_arr",Object.assign({value:apath.concat(k),},this.baseProp))
- Object.defineProperty(v,"__path",Object.assign({value:xpath+":"+k,},this.baseProp))
- Object.defineProperty(v,"__dpth",Object.assign({value:dpth,},this.baseProp))
- // Object.defineProperty(v,"__dbg",Object.assign({value:{},},this.baseProp))
-
- }
- set_obj(obj, prop, val,receiver){
- var dpth = obj.__dpth
- var tf = {}
- var dbg_obj = {}
- this.walker(receiver,tf,dpth,dbg_obj)
- if (dbg_obj.depth_err){
- clog("MAX DEPTH?",dbg_obj,{obj, prop, val,receiver})
- }
- }
-
- walker(o,tfo,dpth=0,dbg_obj={"t":"unused"}){
- // if (dpth > 7){
- if (dpth > 15){
- dbg_obj.depth_err=1
- console.error("MAX DEPTH",{o,tfo,dpth,dbg_obj})
- return
- }
- var k,v
- var tf
- for ([k,v] of Object.entries(o)){
- tf = type_info(v)
- if (tf.deep_not_prx){
- o._set(o,k,v,new Proxy(v,this.prxy))
- o[k].add_proxy(o,k,v,dpth)
- this.walker(o[k],tf,dpth+1,dbg_obj)
- }
- }
- }
- walker_start(o,dpth){
- var tf = type_info(o)
- o.add_proxy({},[],o,-1)
- this.walker(o,tf,0)
- }
- event_proc(e){}
- }
- window.Proxy_Factory = Proxy_Factory
-
- Proxy_Factory.prototype.baseProp={
- writable: true,
- enumerable: false,
- // enumerable: true,
- configurable: true,
- }
- // }
-
-
-
-
- function arr_match(m,o){
- var k,v
- var r = 0
- for ([k,v] of Object.entries(m || {})){
- if (o[k] != v.valueOf()){
- r += 1
- return !r
- }
- }
- return !r
- }
-
- // permissions_def = {
- window.permissions_def = window.permissions_def || {
- participants:{
- m:["participants"],
- fn(set_scope,match){
-
- if (match.fp[1] == "rejx")
- throw "permission err"
- return
- },
- }
- }
-
-
-
- // {
- Proxy_Permissions = class Proxy_Permissions extends Proxy_Factory {
- constructor(a,a1){
- super(...arguments)
- }
- set(obj, prop, val,receiver){
- var k,v
- var r
- var matched
- var fp = obj.__path_arr.concat(prop)
- for ([k,v] of Object.entries(permissions_def)){
- matched = arr_match(v.m,fp)
- if (matched){
- r = v.fn({that:this,obj, prop, val,receiver},{fp,k,v}) || {}
- }
- }
- return super.set(obj, prop, val,receiver)
- }
- _set(){
- super._set(...arguments)
- }
- }
- window.Proxy_Permissions = Proxy_Permissions
- // }
-
-
- // clog("???")
|