mirror of
https://github.com/Open-Argon/http.ar.git
synced 2026-10-28 18:02:53 +00:00
79 lines
1.9 KiB
Plaintext
79 lines
1.9 KiB
Plaintext
import "../../src" as http
|
|
|
|
let parent = path.parent(program.file.path)
|
|
|
|
let saveFile = path.join([parent, "canvas.json"])
|
|
|
|
let changes = []
|
|
let canvas = []
|
|
|
|
let save() = do
|
|
let f = file.write(saveFile)
|
|
f.json({canvas:canvas, changes: changes})
|
|
let load() = do
|
|
try do
|
|
let data = file.read(saveFile).json()
|
|
canvas = data.canvas
|
|
changes = data.changes
|
|
catch (e) do
|
|
let row = []
|
|
for (i from 0 to size.width) do
|
|
row.append(null)
|
|
for (i from 0 to size.height) do
|
|
canvas.append(row.copy())
|
|
|
|
|
|
|
|
let app = http.server()
|
|
|
|
let size = { width: 150, height: 150 }
|
|
|
|
app.use(http.logger)
|
|
|
|
let setPixel(x,y, colour) = do
|
|
if (x >= size.width || y >= size.height) do
|
|
return
|
|
canvas[y][x] = colour
|
|
changes.insert(0, {x: x, y: y, colour: colour, time: time.now().unixMilli()})
|
|
|
|
load()
|
|
let saveThread() = do
|
|
forever do
|
|
time.snooze(30)
|
|
save()
|
|
let t = thread(saveThread)
|
|
t.start()
|
|
|
|
let err404path = path.join([parent,"static", "404.html"])
|
|
|
|
app.use(http.static("/",path.join([parent,"static"])))
|
|
|
|
app.get('/get-canvas', (req, res) = res.json({canvas:canvas, time:time.now()}))
|
|
|
|
let getCanvasUpdates(req, res) = do
|
|
if ("lastTime" not in req.query) do
|
|
res.json(changes)
|
|
return
|
|
let lastTime = number(req.query.lastTime)
|
|
let filtered = []
|
|
for (i from 0 to changes.length) do
|
|
if (changes[i].time > lastTime) do
|
|
filtered.append(changes[i])
|
|
else break
|
|
res.json({updates:filtered, time:time.now()})
|
|
|
|
app.get('/get-canvas-updates', getCanvasUpdates)
|
|
|
|
let updatePixel(req, res) = do
|
|
let data = json.parse(req.buffer.body.to('string'))
|
|
setPixel(data.x, data.y, data.colour)
|
|
res.send('200 OK')
|
|
app.post('/update-canvas', updatePixel)
|
|
|
|
let err404(req, res) = do
|
|
res.code = 404
|
|
res.sendFile(err404path)
|
|
app.use(err404)
|
|
|
|
app.port = 5000
|
|
app.run() |