r_place/python/clients.py

75 lines
1.9 KiB
Python

#!/usr/bin/env python
import asyncio
from dataclasses import dataclass
import datetime
import json
import random
import time
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
import websockets
import cv2
import matplotlib.image as mpimg
@dataclass
class pixel:
x: int
y: int
color: int
timestamp: int
userid: int
async def sender(img):
async with websockets.connect("ws://localhost:8080/set") as websocket:
while True:
rx = random.randint(0, 999)
ry = random.randint(0, 999)
message = pixel(
x=rx,
y=ry,
color=int(img[rx][ry][0]*255),
timestamp=int(time.time()),
userid=1,
)
await websocket.send(json.dumps(message.__dict__))
succ = await websocket.recv()
if succ == "1":
print(message, "was not set")
await asyncio.sleep(0.01)
async def client():
image = np.zeros(shape=[1000, 1000, 3], dtype=np.uint8)
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
x = pixel(**json.loads(await websocket.recv()))
#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
await websocket.send("1")
#print(i, x)
async def main():
img=mpimg.imread('logo.png')
coros = [sender(img) for _ in range(10)]
coros.append(client())
returns = await asyncio.gather(*coros)
if __name__ == "__main__":
asyncio.get_event_loop().run_until_complete(main())