mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
75 lines
1.7 KiB
V
75 lines
1.7 KiB
V
module main
|
|
|
|
import log
|
|
import net.http
|
|
import net.websocket
|
|
import term
|
|
import vweb
|
|
|
|
const http_port = 8080
|
|
|
|
struct App {
|
|
vweb.Context
|
|
mut:
|
|
wss &websocket.Server @[vweb_global]
|
|
}
|
|
|
|
fn slog(message string) {
|
|
eprintln(term.colorize(term.bright_yellow, message))
|
|
}
|
|
|
|
fn clog(message string) {
|
|
eprintln(term.colorize(term.cyan, message))
|
|
}
|
|
|
|
fn wlog(message string) {
|
|
eprintln(term.colorize(term.bright_blue, message))
|
|
}
|
|
|
|
fn main() {
|
|
mut app := new_app() or { panic(err) }
|
|
vweb.run(app, http_port)
|
|
}
|
|
|
|
fn new_app() !&App {
|
|
mut app := &App{
|
|
wss: new_websocker_server()!
|
|
}
|
|
app.handle_static('assets', true)
|
|
return app
|
|
}
|
|
|
|
fn new_websocker_server() !&websocket.Server {
|
|
mut logger := &log.Log{}
|
|
logger.set_level(.debug)
|
|
mut wss := websocket.new_server(.ip, 8080, '', logger: logger)
|
|
wss.on_connect(fn (mut server_client websocket.ServerClient) !bool {
|
|
slog('ws.on_connect, server_client.client_key: ${server_client.client_key}')
|
|
return true
|
|
})!
|
|
wss.on_message(fn (mut ws websocket.Client, msg &websocket.Message) ! {
|
|
slog('s.on_message msg.opcode: ${msg.opcode} | msg.payload: ${msg.payload}')
|
|
ws.write(msg.payload, msg.opcode) or {
|
|
eprintln('ws.write err: ${err}')
|
|
return err
|
|
}
|
|
})
|
|
wss.on_close(fn (mut ws websocket.Client, code int, reason string) ! {
|
|
slog('s.on_close code: ${code}, reason: ${reason}')
|
|
})
|
|
slog('Websocket Server initialized')
|
|
return wss
|
|
}
|
|
|
|
pub fn (mut app App) index() vweb.Result {
|
|
return $vweb.html()
|
|
}
|
|
|
|
pub fn (mut app App) ws() !vweb.Result {
|
|
key := app.req.header.get(http.CommonHeader.sec_websocket_key)!
|
|
app.wss.handle_handshake(mut app.conn, key) or {
|
|
wlog('handle_handshake error: ${err.msg()}')
|
|
return err
|
|
}
|
|
return app.text('')
|
|
}
|