r_place/python/clients.py

75 lines
1.9 KiB
Python
Raw Normal View History

2022-05-26 12:14:36 +00:00
#!/usr/bin/env python
import asyncio
from dataclasses import dataclass
import datetime
import json
import random
2022-05-26 12:14:36 +00:00
import time
2022-05-29 10:08:56 +00:00
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
2022-05-26 12:14:36 +00:00
import websockets
2022-05-29 10:08:56 +00:00
import cv2
2022-05-31 16:29:44 +00:00
import matplotlib.image as mpimg
2022-05-26 12:14:36 +00:00
@dataclass
class pixel:
x: int
y: int
color: int
timestamp: int
userid: int
2022-05-31 16:29:44 +00:00
async def sender(img):
async with websockets.connect("ws://localhost:8080/set") as websocket:
while True:
2022-05-31 16:29:44 +00:00
rx = random.randint(0, 999)
ry = random.randint(0, 999)
message = pixel(
2022-05-31 16:29:44 +00:00
x=rx,
y=ry,
color=int(img[rx][ry][0]*255),
timestamp=int(time.time()),
userid=1,
)
await websocket.send(json.dumps(message.__dict__))
2022-05-31 14:15:09 +00:00
succ = await websocket.recv()
if succ == "1":
print(message, "was not set")
2022-05-31 16:29:44 +00:00
await asyncio.sleep(0.01)
async def client():
2022-05-31 14:15:09 +00:00
image = np.zeros(shape=[1000, 1000, 3], dtype=np.uint8)
2022-05-29 10:08:56 +00:00
colors = []
for name, hex in matplotlib.colors.cnames.items():
colors.append(matplotlib.colors.to_rgb(hex))
async with websockets.connect("ws://localhost:8080/get") as websocket:
i= 0
while True:
i+=1
2022-05-29 10:08:56 +00:00
x = pixel(**json.loads(await websocket.recv()))
2022-05-31 16:29:44 +00:00
#image[x.x][x.y] = ([y*255 for y in colors[x.color]])
image[x.x][x.y] = ((x.color, x.color, x.color))
if i% 1000 == 0:
print("showing")
cv2.imshow("changes x", image)
cv2.waitKey(10) & 0XFF
2022-05-31 14:15:09 +00:00
await websocket.send("1")
#print(i, x)
2022-05-26 12:14:36 +00:00
async def main():
2022-05-31 16:29:44 +00:00
img=mpimg.imread('logo.png')
coros = [sender(img) for _ in range(10)]
coros.append(client())
returns = await asyncio.gather(*coros)
2022-05-26 12:14:36 +00:00
if __name__ == "__main__":
asyncio.get_event_loop().run_until_complete(main())