Skip to content

Commit f14c9cc

Browse files
committed
Auto reconnect recovery
1 parent 61c6290 commit f14c9cc

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

lib/atem.coffee

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ EventEmitter = (require 'events').EventEmitter
44
class ATEM
55
DEBUG = if process.env['ATEM_DEBUG'] then process.env['ATEM_DEBUG'] == 'true' else false
66
DEFAULT_PORT = 9910
7+
RECONNECT_INTERVAL = 5000
78

89
COMMAND_CONNECT_HELLO = [
910
0x10, 0x14, 0x53, 0xAB,
@@ -54,16 +55,27 @@ class ATEM
5455
audio:
5556
channels: {}
5657

58+
connected: false
59+
localPackedId: 1
60+
5761
constructor: (local_port = 0) ->
5862
local_port ||= 1024 + Math.floor(Math.random() * 64511) # 1024-65535
5963

60-
@localPackedId = 1
61-
6264
@socket = dgram.createSocket 'udp4'
6365
@socket.on 'message', @_receivePacket
6466
@socket.bind local_port
6567
@sessionId = []
6668
@event = new EventEmitter
69+
@event.on 'ping', (err) =>
70+
@lastPingedAt = new Date().getTime()
71+
72+
setInterval( =>
73+
if @lastPingedAt + RECONNECT_INTERVAL < new Date().getTime()
74+
if @connected
75+
@connected = false
76+
@event.emit 'disconnect', null, null
77+
@connect(@address, @port) if @lastPingedAt + RECONNECT_INTERVAL < new Date().getTime()
78+
, RECONNECT_INTERVAL)
6779

6880
connect: (@address, @port = DEFAULT_PORT) ->
6981
@_sendPacket COMMAND_CONNECT_HELLO
@@ -112,7 +124,8 @@ class ATEM
112124
if remote.size == 20 # Bad
113125
@_sendPacket COMMAND_CONNECT_HELLO_ANSWER
114126
@event.once 'ping', (err) => # Bad
115-
@event.emit 'connect', err, null
127+
@connected = true
128+
@event.emit 'connect', null, null
116129
else if flags & 0x01 || flags & 0x02
117130
@_sendPacket [
118131
0x80, 0x0C, @sessionId[0], @sessionId[1],

0 commit comments

Comments
 (0)