8000 Added await async.sleep(0) to wait in the non async pygame event loop · neumond/python-computer-craft@4241781 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4241781

Browse files
committed
Added await async.sleep(0) to wait in the non async pygame event loop
1 parent cfd9700 commit 4241781

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

Commander/coms.py

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44

55
from typing import List, Callable, Set
66

7+
import datetime
8+
79
# todo full type hinting
810

911

12+
def dprint(type, *args):
13+
print(str(datetime.datetime.now()) + ": (" + asyncio.current_task().get_name() + ") " + type + ": \n\t", *args)
14+
15+
1016
class Radio:
1117

1218
ETX = b'\x03' # end of transmission tag
@@ -30,19 +36,19 @@ def sequence(self, message: str) -> None:
3036
self.writer.write(data)
3137

3238
async def send(self, message: str) -> None:
33-
print("(", asyncio.Task.current_task().get_name(), ") Sending: ", message)
39+
dprint("Sending", message)
3440
self.sequence(message)
3541
await self.writer.drain()
3642

3743
async def feedback(self, message: str) -> None:
3844
data = self.prepare(message)
39-
print("(", asyncio.Task.current_task().get_name(), ") Feeding-back: ", message)
45+
dprint("Feeding-back", message)
4046
self.reader.feed_data(data)
4147

4248
async def receive(self) -> str:
4349
data = await self.reader.readuntil(self.ETX)
4450
message = self.unpack(data)
45-
print("(", asyncio.Task.current_task().get_name(), ") Received: ", message)
51+
dprint("Received", message)
4652
return message
4753

4854

@@ -61,6 +67,7 @@ def __init__(self, name, reader=None, writer=None):
6167
self.__name__ = type(self).__name__ + "-" + name
6268

6369
self.white_list_functions: List[str] = [ # todo change to function reference in a json friendly way
70+
"echo",
6471
"close"
6572
]
6673

@@ -75,11 +82,11 @@ async def callback(self, response: dict) -> None:
7582
args = ()
7683
await function(*args)
7784
else:
78-
print("(", asyncio.Task.current_task().get_name(), ") Request unrecognised by server: " + str(response))
85+
print("(", asyncio.current_task().get_name(), ") Request unrecognised by server: " + str(response))
7986

8087
async def run(self) -> None:
81-
asyncio.Task.current_task().set_name(self.__name__ + "-Transmitter")
82-
print("(", asyncio.Task.current_task().get_name(), ") listening")
88+
asyncio.current_task().set_name(self.__name__ + "-Transmitter")
89+
dprint("listening")
8390
if self.ready:
8491
try:
8592
while self.ready:
@@ -90,9 +97,17 @@ async def run(self) -> None:
9097
await self.writer.wait_closed()
9198
self.reader, self.writer = None, None
9299

100+
async def echo(self, message: str) -> None:
101+
print(message)
102+
93103
async def close(self) -> None:
94104
self.ready = False
95105

106+
async def quit(self) -> None:
107+
json_dict = {"type": "close"}
108+
await self.send(json_dict)
109+
await self.feedback(json_dict)
110+
96111
def prepare(self, json_dict: dict) -> bytes:
97112
message = json.dumps(json_dict, default=json_encoder)
98113
return super().prepare(message)
@@ -155,7 +170,7 @@ def __init__(self, addr='127.0.0.1', port=8888):
155170
self.connections: List[Node] = list()
156171

157172
async def handler(self, reader: StreamReader, writer: StreamWriter):
158-
name = asyncio.Task.current_task().get_name()
173+
name = asyncio.current_task().get_name()
159174
node = Node(name, self, reader, writer)
160175
self.connections.append(node)
161176
try:
@@ -166,11 +181,11 @@ async def handler(self, reader: StreamReader, writer: StreamWriter):
166181
async def run(self):
167182
self.server = await asyncio.start_server(self.handler, self.addr, self.port)
168183
await self.server.start_serving()
169-
print(f'Serving on {self.server.sockets[0].getsockname()}')
184+
dprint("Starting", f'Serving on {self.server.sockets[0].getsockname()}')
170185

171186
async def close(self):
172187
for node in self.connections:
173-
await node.close_client()
188+
await node.quit()
174189

175190
self.server.close()
176191
await self.server.wait_closed()
@@ -195,11 +210,6 @@ async def broadcast(self, json_dict: dict, tag: str):
195210
if tag in node.subscriptions: # todo change to channels containing Nodes to avoid for loops
196211
await node.send(json_dict)
197212

198-
async def close_client(self):
199-
json_dict = {"type": "close"}
200-
await self.send(json_dict)
201-
await self.feedback(json_dict)
202-
203213

204214
def main():
205215
host = Host()

Commander/piano.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self, name):
7777
self.background = self.background.convert()
7878
self.background.fill((250, 250, 250))
7979

80-
async def run(self):
80+
async def run(self): # todo create try catch
8181
await self.connect()
8282
# await self.request("subscribe", "keyboard")
8383
await self.request("subscribe", "piano")
@@ -89,17 +89,20 @@ async def run(self):
8989
async def loop(self):
9090
while True:
9191
events = pygame.event.get()
92+
await asyncio.sleep(0) # todo review
9293
for event in events:
9394
if event.type in [pygame.KEYDOWN, pygame.KEYUP]:
9495
if event.key == pygame.K_SPACE:
9596
await self.broadcast("piano", "sustain", event.type == pygame.KEYDOWN)
9697
elif event.key in self.mapping:
9798
await self.broadcast("piano", "note", self.mapping[event.key] + self.step_up, event.type == pygame.KEYDOWN)
9899
if event.type == pygame.QUIT:
100+
await self.quit()
99101
return
100102

101103
self.screen.blit(self.background, (0, 0))
102-
pygame.display.flip()
104+
# pygame.display.flip()
105+
pygame.display.update()
103106

104107

105108
if __name__ == "__main__":

0 commit comments

Comments
 (0)
0