@@ -4,6 +4,7 @@ EventEmitter = (require 'events').EventEmitter
44class 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