mirror of https://github.com/Askill/r_place.git
no more timeouts
This commit is contained in:
parent
dd4414ff0d
commit
2293f52d9f
40
go/server.go
40
go/server.go
|
|
@ -5,6 +5,7 @@ import (
|
|||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
|
|
@ -14,7 +15,22 @@ var upgrader = websocket.Upgrader{
|
|||
ReadBufferSize: 2048,
|
||||
WriteBufferSize: 2048,
|
||||
}
|
||||
var img = GetImage(100, 100)
|
||||
|
||||
const (
|
||||
// Time allowed to write a message to the peer.
|
||||
writeWait = 10 * time.Second
|
||||
|
||||
// Time allowed to read the next pong message from the peer.
|
||||
pongWait = 60 * time.Second
|
||||
|
||||
// Send pings to peer with this period. Must be less than pongWait.
|
||||
pingPeriod = (pongWait * 9) / 10
|
||||
|
||||
// Maximum message size allowed from peer.
|
||||
maxMessageSize = 512
|
||||
)
|
||||
|
||||
var img = GetImage(1000, 1000)
|
||||
|
||||
func get(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
|
|
@ -22,6 +38,10 @@ func get(w http.ResponseWriter, r *http.Request) {
|
|||
log.Print("error while upgrading", err)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetReadLimit(maxMessageSize)
|
||||
c.SetPongHandler(func(string) error { c.SetReadDeadline(time.Now().Add(pongWait)); return nil })
|
||||
|
||||
defer c.Close()
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
|
||||
|
|
@ -43,8 +63,13 @@ func get(w http.ResponseWriter, r *http.Request) {
|
|||
break
|
||||
}
|
||||
err = c.WriteMessage(1, marshalMsg)
|
||||
_, msg2, _ := c.ReadMessage()
|
||||
_ = msg2
|
||||
}
|
||||
}
|
||||
if err := c.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
||||
return
|
||||
}
|
||||
copy(tmpImage.pixels, refImage.pixels)
|
||||
}
|
||||
}
|
||||
|
|
@ -55,18 +80,25 @@ func set(w http.ResponseWriter, r *http.Request) {
|
|||
log.Print("error while upgrading", err)
|
||||
return
|
||||
}
|
||||
c.SetReadLimit(maxMessageSize)
|
||||
|
||||
c.SetPongHandler(func(string) error { c.SetReadDeadline(time.Now().Add(pongWait)); return nil })
|
||||
|
||||
defer c.Close()
|
||||
for {
|
||||
_, msg, err := c.ReadMessage()
|
||||
mt, msg, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
log.Println("read:", err)
|
||||
break
|
||||
}
|
||||
|
||||
if mt == websocket.PingMessage {
|
||||
continue
|
||||
}
|
||||
message := Message{}
|
||||
json.Unmarshal(msg, &message)
|
||||
|
||||
img.SetPixel(message)
|
||||
status := img.SetPixel(message)
|
||||
err = c.WriteMessage(1, []byte(strconv.Itoa(status)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,18 +48,18 @@ func (p *pixelContainer) setColor(color uint8, timestamp int64, userid uint64) {
|
|||
}
|
||||
}
|
||||
|
||||
func (img *image) SetPixel(message Message) *image {
|
||||
func (img *image) SetPixel(message Message) int {
|
||||
if message.X >= img.width || message.Y >= img.height || message.X < 0 || message.Y < 0 {
|
||||
fmt.Printf("User %d tried accessing out of bounds \n", message.UserID)
|
||||
return img
|
||||
return 1
|
||||
}
|
||||
if message.Color >= 16 || message.Color < 0 {
|
||||
fmt.Printf("User %d tried setting non existent color \n", message.UserID)
|
||||
return img
|
||||
return 1
|
||||
}
|
||||
pos := uint32(message.X)*uint32(img.width) + uint32(message.Y)
|
||||
img.pixels[pos].setColor(message.Color, message.Timestamp, message.UserID)
|
||||
return img
|
||||
return 0
|
||||
}
|
||||
|
||||
func comparePixels(pixel1 *pixelContainer, pixel2 *pixelContainer) bool {
|
||||
|
|
|
|||
|
|
@ -26,18 +26,21 @@ async def sender():
|
|||
async with websockets.connect("ws://localhost:8080/set") as websocket:
|
||||
while True:
|
||||
message = pixel(
|
||||
x=random.randint(0, 99),
|
||||
y=random.randint(0, 99),
|
||||
color=random.randint(0,11),
|
||||
x=random.randint(0, 999),
|
||||
y=random.randint(0, 999),
|
||||
color=random.randint(0,15),
|
||||
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.1)
|
||||
|
||||
async def client():
|
||||
image = np.zeros(shape=[100, 100, 3], dtype=np.uint8)
|
||||
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))
|
||||
|
|
@ -48,10 +51,11 @@ async def client():
|
|||
i+=1
|
||||
x = pixel(**json.loads(await websocket.recv()))
|
||||
image[x.x][x.y] = ([y*255 for y in colors[x.color]])
|
||||
if i% 1000 == 0:
|
||||
if i% 500 == 0:
|
||||
cv2.imshow("changes x", image)
|
||||
cv2.waitKey(10) & 0XFF
|
||||
print(i, x)
|
||||
await websocket.send("1")
|
||||
#print(i, x)
|
||||
|
||||
async def main():
|
||||
coros = [sender() for _ in range(100)]
|
||||
|
|
|
|||
Loading…
Reference in New Issue