feat: add cJSON and SQLite amalgamation source files under deps/
Add the cJSON library (cJSON.c, cJSON.h) and SQLite amalgamation (sqlite3.c, sqlite3.h, sqlite3ext.h, shell.c) as vendored dependencies in the deps/ directory for use by the project build system.
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "websocket" for WebSocket, WebSocketServer
|
||||
import "scheduler" for Scheduler
|
||||
import "timer" for Timer
|
||||
|
||||
var port = 8080
|
||||
var clientCount = 0
|
||||
var messageCount = 0
|
||||
|
||||
System.print("=== Concurrent WebSocket Server ===")
|
||||
System.print("Listening on ws://0.0.0.0:%(port)")
|
||||
System.print("Each client connection runs in its own fiber.\n")
|
||||
|
||||
var server = WebSocketServer.bind("0.0.0.0", port)
|
||||
|
||||
var handleClient = Fn.new { |ws, clientId|
|
||||
System.print("[Client %(clientId)] Connected")
|
||||
|
||||
while (ws.isOpen) {
|
||||
var msg = ws.receive()
|
||||
|
||||
if (msg == null) {
|
||||
System.print("[Client %(clientId)] Connection lost")
|
||||
break
|
||||
}
|
||||
|
||||
if (msg.isClose) {
|
||||
System.print("[Client %(clientId)] Sent close frame")
|
||||
break
|
||||
}
|
||||
|
||||
if (msg.isText) {
|
||||
messageCount = messageCount + 1
|
||||
var text = msg.text
|
||||
System.print("[Client %(clientId)] Received: %(text) (total messages: %(messageCount))")
|
||||
|
||||
if (text == "ping") {
|
||||
ws.send("pong")
|
||||
} else if (text == "stats") {
|
||||
ws.send("clients: %(clientCount), messages: %(messageCount)")
|
||||
} else if (text == "broadcast") {
|
||||
ws.send("broadcast not implemented in this example")
|
||||
} else {
|
||||
ws.send("echo: %(text)")
|
||||
}
|
||||
} else if (msg.isBinary) {
|
||||
messageCount = messageCount + 1
|
||||
System.print("[Client %(clientId)] Received binary: %(msg.bytes.count) bytes")
|
||||
ws.sendBinary(msg.bytes)
|
||||
}
|
||||
}
|
||||
|
||||
clientCount = clientCount - 1
|
||||
System.print("[Client %(clientId)] Disconnected (%(clientCount) clients remaining)")
|
||||
}
|
||||
|
||||
while (true) {
|
||||
var ws = server.accept()
|
||||
|
||||
if (ws != null) {
|
||||
clientCount = clientCount + 1
|
||||
var clientId = clientCount
|
||||
|
||||
Scheduler.add {
|
||||
handleClient.call(ws, clientId)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user