|
@@ -28,9 +28,31 @@ def connect_redis():
|
28
|
28
|
# '''
|
29
|
29
|
|
30
|
30
|
|
|
31
|
+def callable_helper(fn):
|
|
32
|
+ ret = {
|
|
33
|
+ "is_callable":0,
|
|
34
|
+ "is_coroutine":0,
|
|
35
|
+ }
|
|
36
|
+ ret["is_callable"]= callable(fn)
|
|
37
|
+ ret["is_coroutine"]= inspect.iscoroutinefunction(fn)
|
|
38
|
+ # if (ca)
|
|
39
|
+
|
|
40
|
+ return ret
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
31
|
53
|
class AclTaskMixin:
|
32
|
54
|
async def ws_conn0(self):
|
33
|
|
- glob_cl.init_gcl(self)
|
|
55
|
+ glob_cl.run_persistent_loop(self)
|
34
|
56
|
print("++++++++++++++++++++++++++")
|
35
|
57
|
# oinfo(glob_cl)
|
36
|
58
|
async def ws_conn_once(self,*a,**kw):
|
|
@@ -43,20 +65,100 @@ class AclTaskMixin:
|
43
|
65
|
class globCL():
|
44
|
66
|
def __init__(self,*a,**kw):
|
45
|
67
|
# for now we are not going to do any weird class stuff
|
46
|
|
- self.r = connect_redis()
|
|
68
|
+ self.rconn = connect_redis()
|
|
69
|
+ self.rman = RldMan()
|
|
70
|
+ self.cbs_once = []
|
|
71
|
+ self.cbs_once_set = set()
|
|
72
|
+ self.cbs = {"fn1":fn1,"fn2x":nop}
|
47
|
73
|
pass
|
48
|
74
|
async def persistent_loop(self,*a,**kw):
|
49
|
|
- pass
|
50
|
|
- def run_persistent_loop(self,*a,**kw):
|
|
75
|
+ while 1:
|
|
76
|
+ # p("PL:",time.time(),flush=1)
|
|
77
|
+ # await asyncio.sleep(5)
|
|
78
|
+ # for k,v in cls.cbs.items():
|
|
79
|
+ for k,v in [*self.cbs.items()]:
|
|
80
|
+ try:
|
|
81
|
+ call_info = callable_helper(v)
|
|
82
|
+ if (call_info["is_callable"]):
|
|
83
|
+ if call_info["is_coroutine"]:
|
|
84
|
+ pass
|
|
85
|
+ await v({k,self})
|
|
86
|
+ else:
|
|
87
|
+ v({k,self})
|
|
88
|
+
|
|
89
|
+ else:
|
|
90
|
+ pass
|
|
91
|
+ # p(k,v)
|
|
92
|
+
|
|
93
|
+ pass
|
|
94
|
+ except Exception as e:
|
|
95
|
+ p("persistent_loop Exception",e)
|
|
96
|
+ p(flush=True)
|
|
97
|
+ # raise
|
|
98
|
+ else:
|
|
99
|
+ pass
|
|
100
|
+ finally:
|
|
101
|
+ pass
|
|
102
|
+ # cbs_once
|
|
103
|
+ cbs_once = [*self.cbs_once,*self.cbs_once_set]
|
|
104
|
+ self.cbs_once = []
|
|
105
|
+ self.cbs_once_set = set()
|
|
106
|
+ k=0
|
|
107
|
+ for v in cbs_once:
|
|
108
|
+ try:
|
|
109
|
+ call_info = callable_helper(v)
|
|
110
|
+ if (call_info["is_callable"]):
|
|
111
|
+ if call_info["is_coroutine"]:
|
|
112
|
+ pass
|
|
113
|
+ await v({k,self})
|
|
114
|
+ else:
|
|
115
|
+ v({k,self})
|
|
116
|
+
|
|
117
|
+ else:
|
|
118
|
+ pass
|
|
119
|
+ # p(k,v)
|
|
120
|
+
|
|
121
|
+ pass
|
|
122
|
+ except Exception as e:
|
|
123
|
+ p("persistent_loop Exception cbs_once:",e)
|
|
124
|
+ p(flush=True)
|
|
125
|
+ # raise
|
|
126
|
+ else:
|
|
127
|
+ pass
|
|
128
|
+ finally:
|
|
129
|
+ pass
|
|
130
|
+ k += 1
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+ await asyncio.sleep(cls.timeout)
|
|
136
|
+ def _run_persistent_loop(self,*a,**kw):
|
|
137
|
+ p("_run_persistent_loop:")
|
|
138
|
+ loop = asyncio.get_event_loop()
|
|
139
|
+ self.run_persistent_loop = nop
|
|
140
|
+ loop.create_task(self.persistent_loop())
|
|
141
|
+ self.loop = loop
|
|
142
|
+ run_persistent_loop = _run_persistent_loop
|
|
143
|
+
|
51
|
144
|
pass
|
52
|
145
|
|
53
|
146
|
# RldManMixin
|
54
|
147
|
class RldMan():
|
55
|
148
|
def __init__(self,*a,**kw):
|
|
149
|
+ self.files = {}
|
|
150
|
+
|
56
|
151
|
base_path = "/usr/games/repos/ign4/py_rld/djc/rdir1/"
|
57
|
|
- self.files = [
|
58
|
|
- base_path+"",
|
|
152
|
+
|
|
153
|
+ file_list = [
|
|
154
|
+ base_path+"r0.py",
|
|
155
|
+ base_path+"r1.py",
|
|
156
|
+ base_path+"r2.py",
|
|
157
|
+ base_path+"r3.py",
|
|
158
|
+ base_path+"r4.py",
|
|
159
|
+ base_path+"r5.py",
|
59
|
160
|
]
|
|
161
|
+ self.add_files(file_list)
|
60
|
162
|
def add_files(self,files):
|
61
|
163
|
for file in files:
|
62
|
164
|
if type(file)==str:
|
|
@@ -67,9 +169,27 @@ class RldMan():
|
67
|
169
|
p("add files???",file)
|
68
|
170
|
def add_file(self,file_name,fnx={}):
|
69
|
171
|
self.files[file_name] = {"ftxt":"",**fnx}
|
70
|
|
-
|
71
|
|
-
|
72
|
|
-
|
|
172
|
+ def rld_files(self):
|
|
173
|
+ # p()
|
|
174
|
+
|
|
175
|
+ ret = {
|
|
176
|
+ "errs":{},
|
|
177
|
+ "all":{},
|
|
178
|
+ "alle":{},
|
|
179
|
+ }
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+ # for k in self.files:
|
|
184
|
+ for k in [*self.files]:
|
|
185
|
+ self.rld_file(k,ret)
|
|
186
|
+ p("rld_files!")
|
|
187
|
+ p("",end="",flush=True)
|
|
188
|
+ return ret
|
|
189
|
+
|
|
190
|
+def fn1(*a,**kw):
|
|
191
|
+ # rld_files
|
|
192
|
+ glob_cl.rman.rld_files()
|
73
|
193
|
glob_cl = globCL()
|
74
|
194
|
|
75
|
195
|
|
|
@@ -81,7 +201,7 @@ glob_cl = globCL()
|
81
|
201
|
# print("..",end="\n",flush=True)
|
82
|
202
|
|
83
|
203
|
def redis_info():
|
84
|
|
- rconn = glob_cl.r
|
|
204
|
+ rconn = glob_cl.rconn
|
85
|
205
|
keys = rconn.keys()
|
86
|
206
|
for k in keys:
|
87
|
207
|
p(":",k)
|