-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwebsocketExample.lua
More file actions
107 lines (89 loc) · 2.91 KB
/
websocketExample.lua
File metadata and controls
107 lines (89 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
-- WebSocket Example
-- Demonstrates connecting to a WebSocket server, sending/receiving messages
local width, height = lge.get_canvas_size()
local status = "Initializing..."
local messageCount = 0
local lastMessage = ""
-- WebSocket configuration
local WS_URL = "wss://echo.websocket.org"
-- Register callback for incoming WebSocket messages
lge.ws_on_message(function(message)
print("Received WebSocket message:")
-- If message is a table (parsed JSON)
if type(message) == "table" then
if message.type then
print(" Type: " .. message.type)
lastMessage = "Type: " .. message.type
end
-- You can access other fields: message.data, message.id, etc.
for k, v in pairs(message) do
print(" " .. k .. ": " .. tostring(v))
end
else
-- Raw string message
print(" " .. tostring(message))
lastMessage = tostring(message)
end
messageCount = messageCount + 1
end)
-- Connect to WebSocket server
if lge.ws_connect(WS_URL) then
status = "Connecting to " .. WS_URL
print(status)
else
status = "Failed to connect"
print(status)
end
local lastSendTime = millis()
local sendInterval = 3000 -- Send a message every 3 seconds
-- Main game loop
while true do
-- Process WebSocket events (IMPORTANT: must call this regularly!)
lge.ws_loop()
-- Update connection status
if lge.ws_is_connected() then
status = "Connected"
-- Send periodic test messages
local currentTime = millis()
if currentTime - lastSendTime >= sendInterval then
local testMsg = string.format('{"type":"test","count":%d,"time":%d}', messageCount, currentTime)
if lge.ws_send(testMsg) then
print("Sent: " .. testMsg)
end
lastSendTime = currentTime
end
else
status = "Disconnected"
end
-- Draw UI
lge.clear_canvas("#000000")
-- Title
lge.draw_text(10, 10, "WebSocket Example", "#00FF00")
-- Status
local statusColor = lge.ws_is_connected() and "#00FF00" or "#FF0000"
lge.draw_text(10, 35, "Status: " .. status, statusColor)
-- Message counter
lge.draw_text(10, 60, "Messages: " .. messageCount, "#FFFFFF")
-- Last message
if lastMessage ~= "" then
lge.draw_text(10, 85, "Last: " .. lastMessage:sub(1, 30), "#FFFF00")
end
-- Instructions
lge.draw_text(10, height - 40, "Touch screen to", "#AAAAAA")
lge.draw_text(10, height - 20, "disconnect/reconnect", "#AAAAAA")
-- Handle touch input
local btn, x, y = lge.get_mouse_click()
if btn ~= nil then
if lge.ws_is_connected() then
print("Disconnecting...")
lge.ws_disconnect()
else
print("Reconnecting...")
lge.ws_connect(WS_URL)
end
end
-- Update display
lge.present()
-- Control frame rate
lge.delay(16) -- ~60 FPS
end