-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconnection.py
105 lines (74 loc) · 2.37 KB
/
connection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os
# import json
# # from weakref import WeakKeyDictionary
# from .utils import generate_random_id
# from .proxy import BaseBridgeProxy
UNDEFINED = object()
class BridgeChain:
def __init__(self):
pass
class BaseBridgeConnection:
def __init__(self, bridge, transporter, mode="auto_eval", server=None):
self.__transporter = transporter
self.__bridge = bridge
self.__mode = mode
self.__server__ = server
def __getattr__(self, name):
if self.__mode == "auto_eval":
return self.__server__.recieve(action="evaluate", value=name)
else:
return BridgeChain(self)
def __quit(self):
self.__server__.stop()
# pass
def __del__(self):
self.__quit()
def __enter__(self, *a, **kw):
return self
def __exit__(self, *a, **kw):
self.__quit()
return
class NodeBridgeConnection(BaseBridgeConnection):
def __init__(self, *a, **kw):
super().__init__(*a, **kw)
self.__require = None
def __getattr__(self, name):
if name == "let" or name == "var":
return self.__handle_let
if name == "await_":
return self.__handle_await
if name == "_require": name = "require"
return super().__getattr__(name)
def __handle_let(self, *keys, **values):
target = []
[target.append(f"{key}") for key in keys]
if values:
for key in values:
target.append(f"globalThis.{key} = {values[key]}")
self.__getattr__(
name=f"{', '.join(target)};"
)
def __handle_await(self, item):
return self.__server__.recieve(
action="await_proxy",
location=item.__data__['location']
)
def require(self, module):
if not self.__require:
self.__require = self.__server__.recieve(
action="evaluate", value='require'
)
return self.__require(
os.path.join(os.getcwd(), module) if "." in module
else module
)
class BrowserBridgeConnection(NodeBridgeConnection):
pass
class RubyBridgeConnection(BaseBridgeConnection):
pass
class JavaBridgeConnection(BaseBridgeConnection):
pass
class CSharpBridgeConnection(BaseBridgeConnection):
pass
class GoLangBridgeConnection(BaseBridgeConnection):
pass