@rip-lang/server 1.1.10 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/server.rip +18 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rip-lang/server",
3
- "version": "1.1.10",
3
+ "version": "1.1.12",
4
4
  "description": "Pure Rip application server — multi-worker, hot reload, HTTPS, mDNS",
5
5
  "type": "module",
6
6
  "main": "server.rip",
package/server.rip CHANGED
@@ -872,6 +872,18 @@ class Server
872
872
  registerWatch: (prefix) ->
873
873
  return if @watchGroups.has(prefix)
874
874
  @watchGroups.set prefix, { sseClients: new Set() }
875
+ @startHeartbeat()
876
+
877
+ startHeartbeat: ->
878
+ return if @_heartbeat
879
+ @_heartbeat = setInterval =>
880
+ for [prefix, group] as @watchGroups
881
+ dead = []
882
+ for client as group.sseClients
883
+ try client.ping()
884
+ catch then dead.push(client)
885
+ group.sseClients.delete(c) for c in dead
886
+ , 5000
875
887
 
876
888
  handleWatch: (prefix) ->
877
889
  group = @watchGroups.get(prefix)
@@ -880,12 +892,14 @@ class Server
880
892
  client = null
881
893
  new Response new ReadableStream(
882
894
  start: (controller) ->
883
- send = (event) ->
884
- try controller.enqueue encoder.encode("event: #{event}\n\n")
895
+ write = (data) ->
896
+ try controller.enqueue encoder.encode(data)
885
897
  catch then null
886
- client = { send }
898
+ client =
899
+ send: (event) -> write "event: #{event}\n\n"
900
+ ping: -> write ":\n\n"
887
901
  group.sseClients.add(client)
888
- send('connected')
902
+ client.send('connected')
889
903
  cancel: ->
890
904
  group.sseClients.delete(client) if client
891
905
  ),