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"
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
|
@ -14,7 +15,22 @@ var upgrader = websocket.Upgrader{
|
||||||
ReadBufferSize: 2048,
|
ReadBufferSize: 2048,
|
||||||
WriteBufferSize: 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) {
|
func get(w http.ResponseWriter, r *http.Request) {
|
||||||
c, err := upgrader.Upgrade(w, r, nil)
|
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)
|
log.Print("error while upgrading", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.SetReadLimit(maxMessageSize)
|
||||||
|
c.SetPongHandler(func(string) error { c.SetReadDeadline(time.Now().Add(pongWait)); return nil })
|
||||||
|
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
ticker := time.NewTicker(1 * time.Second)
|
ticker := time.NewTicker(1 * time.Second)
|
||||||
|
|
||||||
|
|
@ -43,8 +63,13 @@ func get(w http.ResponseWriter, r *http.Request) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
err = c.WriteMessage(1, marshalMsg)
|
err = c.WriteMessage(1, marshalMsg)
|
||||||
|
_, msg2, _ := c.ReadMessage()
|
||||||
|
_ = msg2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err := c.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
copy(tmpImage.pixels, refImage.pixels)
|
copy(tmpImage.pixels, refImage.pixels)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -55,18 +80,25 @@ func set(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Print("error while upgrading", err)
|
log.Print("error while upgrading", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
c.SetReadLimit(maxMessageSize)
|
||||||
|
|
||||||
|
c.SetPongHandler(func(string) error { c.SetReadDeadline(time.Now().Add(pongWait)); return nil })
|
||||||
|
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
for {
|
for {
|
||||||
_, msg, err := c.ReadMessage()
|
mt, msg, err := c.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("read:", err)
|
log.Println("read:", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if mt == websocket.PingMessage {
|
||||||
|
continue
|
||||||
|
}
|
||||||
message := Message{}
|
message := Message{}
|
||||||
json.Unmarshal(msg, &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 {
|
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)
|
fmt.Printf("User %d tried accessing out of bounds \n", message.UserID)
|
||||||
return img
|
return 1
|
||||||
}
|
}
|
||||||
if message.Color >= 16 || message.Color < 0 {
|
if message.Color >= 16 || message.Color < 0 {
|
||||||
fmt.Printf("User %d tried setting non existent color \n", message.UserID)
|
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)
|
pos := uint32(message.X)*uint32(img.width) + uint32(message.Y)
|
||||||
img.pixels[pos].setColor(message.Color, message.Timestamp, message.UserID)
|
img.pixels[pos].setColor(message.Color, message.Timestamp, message.UserID)
|
||||||
return img
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func comparePixels(pixel1 *pixelContainer, pixel2 *pixelContainer) bool {
|
func comparePixels(pixel1 *pixelContainer, pixel2 *pixelContainer) bool {
|
||||||
|
|
|
||||||
|
|
@ -26,18 +26,21 @@ async def sender():
|
||||||
async with websockets.connect("ws://localhost:8080/set") as websocket:
|
async with websockets.connect("ws://localhost:8080/set") as websocket:
|
||||||
while True:
|
while True:
|
||||||
message = pixel(
|
message = pixel(
|
||||||
x=random.randint(0, 99),
|
x=random.randint(0, 999),
|
||||||
y=random.randint(0, 99),
|
y=random.randint(0, 999),
|
||||||
color=random.randint(0,11),
|
color=random.randint(0,15),
|
||||||
timestamp=int(time.time()),
|
timestamp=int(time.time()),
|
||||||
userid=1,
|
userid=1,
|
||||||
)
|
)
|
||||||
await websocket.send(json.dumps(message.__dict__))
|
await websocket.send(json.dumps(message.__dict__))
|
||||||
|
succ = await websocket.recv()
|
||||||
|
if succ == "1":
|
||||||
|
print(message, "was not set")
|
||||||
|
|
||||||
await asyncio.sleep(0.1)
|
await asyncio.sleep(0.1)
|
||||||
|
|
||||||
async def client():
|
async def client():
|
||||||
image = np.zeros(shape=[100, 100, 3], dtype=np.uint8)
|
image = np.zeros(shape=[1000, 1000, 3], dtype=np.uint8)
|
||||||
colors = []
|
colors = []
|
||||||
for name, hex in matplotlib.colors.cnames.items():
|
for name, hex in matplotlib.colors.cnames.items():
|
||||||
colors.append(matplotlib.colors.to_rgb(hex))
|
colors.append(matplotlib.colors.to_rgb(hex))
|
||||||
|
|
@ -48,10 +51,11 @@ async def client():
|
||||||
i+=1
|
i+=1
|
||||||
x = pixel(**json.loads(await websocket.recv()))
|
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] = ([y*255 for y in colors[x.color]])
|
||||||
if i% 1000 == 0:
|
if i% 500 == 0:
|
||||||
cv2.imshow("changes x", image)
|
cv2.imshow("changes x", image)
|
||||||
cv2.waitKey(10) & 0XFF
|
cv2.waitKey(10) & 0XFF
|
||||||
print(i, x)
|
await websocket.send("1")
|
||||||
|
#print(i, x)
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
coros = [sender() for _ in range(100)]
|
coros = [sender() for _ in range(100)]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue