Skip to content

Commit 7127982

Browse files
committed
Merge pull request #8 from applest/feature/reconnect
Fix boost bugs
2 parents f2e7104 + a26e789 commit 7127982

1 file changed

Lines changed: 29 additions & 22 deletions

File tree

lib/atem.coffee

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ class ATEM
4343
Program: 0x01
4444
Preview: 0x02
4545

46+
@PacketFlag =
47+
Sync: 0x01
48+
Connect: 0x02
49+
Repeat: 0x04
50+
Unknown: 0x08
51+
Ack: 0x10
52+
4653
state:
4754
tallys : []
4855
channels: {}
@@ -57,27 +64,30 @@ class ATEM
5764

5865
connected: false
5966
localPackedId: 1
67+
sessionId: []
6068

61-
constructor: (local_port = 0) ->
62-
local_port ||= 1024 + Math.floor(Math.random() * 64511) # 1024-65535
63-
64-
@socket = dgram.createSocket 'udp4'
65-
@socket.on 'message', @_receivePacket
66-
@socket.bind local_port
67-
@sessionId = []
69+
constructor: ->
6870
@event = new EventEmitter
6971
@event.on 'ping', (err) =>
70-
@lastPingedAt = new Date().getTime()
72+
@lastConnectAt = new Date().getTime()
7173

7274
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()
75+
return if @lastConnectAt + RECONNECT_INTERVAL > new Date().getTime()
76+
if @connected
77+
@connected = false
78+
@event.emit 'disconnect', null, null
79+
@localPackedId = 1
80+
@sessionId = []
81+
@connect(@address, @port)
7882
, RECONNECT_INTERVAL)
7983

80-
connect: (@address, @port = DEFAULT_PORT) ->
84+
connect: (@address, @port = DEFAULT_PORT, local_port = 0) ->
85+
local_port ||= 1024 + Math.floor(Math.random() * 64511) # 1024-65535
86+
87+
@socket = dgram.createSocket 'udp4'
88+
@socket.on 'message', @_receivePacket
89+
@socket.bind local_port
90+
8191
@_sendPacket COMMAND_CONNECT_HELLO
8292

8393
on: (name, callback) ->
@@ -114,19 +124,16 @@ class ATEM
114124

115125
_receivePacket: (message, remote) =>
116126
length = ((message[0] & 0x07) << 8) | message[1]
117-
flags = message[0] >> 3
118127
return if length != remote.size
119-
128+
flags = message[0] >> 3
120129
@sessionId = [message[2], message[3]]
121-
# if flags != 0x00
122-
# console.log "non zero flag", flags, message
123-
# @remotePacketId = message[10] << 8 | message[11]
124-
if remote.size == 20 # Bad
130+
131+
if flags & ATEM.PacketFlag.Connect
125132
@_sendPacket COMMAND_CONNECT_HELLO_ANSWER
126-
@event.once 'ping', (err) => # Bad
133+
unless @connected
127134
@connected = true
128135
@event.emit 'connect', null, null
129-
else if flags & 0x01 || flags & 0x02
136+
else if flags & ATEM.PacketFlag.Sync
130137
@_sendPacket [
131138
0x80, 0x0C, @sessionId[0], @sessionId[1],
132139
message[10], message[11], 0x00, 0x00,

0 commit comments

Comments
 (0)