Author: titmuss
Date: Tue Oct 21 14:39:41 2008
New Revision: 3176
URL: http://svn.slimdevices.com?rev=3176&root=Jive&view=rev
Log:
Bug: N/A
Description:
Implement reconnect bit in slimproto. This needs more testing.
Fixed a bug in the NetworkThread that prevented the timing out when the
streaming connection gets disconnected.
Minor bug fixes in the PlaybackApplet.
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackApplet.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackMeta.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua
7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackApplet.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackApplet.lua?rev=3176&root=Jive&r1=3175&r2=3176&view=diff
==============================================================================
---
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackApplet.lua
(original)
+++
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackApplet.lua
Tue Oct 21 14:39:41 2008
@@ -136,7 +136,7 @@
window:addTimer(1000, function()
local status = Decode:status()
- values[1]:setValue(decoders[string.char(status.decoder
or "")] or "?")
+ values[1]:setValue(decoders[string.char(status.decoder
or 0)] or "?")
values[2]:setValue(string.format('%0.1f%%',
status.decodeFull / status.decodeSize * 100))
values[3]:setValue(string.format('%0.1f%%',
status.outputFull / status.outputSize * 100))
values[4]:setValue(status.elapsed)
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackMeta.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackMeta.lua?rev=3176&root=Jive&r1=3175&r2=3176&view=diff
==============================================================================
---
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackMeta.lua
(original)
+++
7.3/trunk/squeezeplay/src/squeezeplay/share/applets/Playback/PlaybackMeta.lua
Tue Oct 21 14:39:41 2008
@@ -68,7 +68,9 @@
server:updateInit(settings.serverInit)
end
- meta.state.player:updateInit(server, settings.playerInit)
+ if settings.playerInit then
+ meta.state.player:updateInit(server, settings.playerInit)
+ end
-- Subscribe to changes in player status
jnt:subscribe(meta)
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=3176&root=Jive&r1=3175&r2=3176&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua Tue Oct
21 14:39:41 2008
@@ -35,6 +35,9 @@
local TCP_CLOSE_LOCAL_TIMEOUT = 4
+local STREAM_READ_TIMEOUT = 30
+local STREAM_WRITE_TIMEOUT = 5
+
function __init(self, jnt, slimproto)
assert(slimproto)
@@ -50,6 +53,8 @@
status.opcode = "STAT"
status.event = event
status.serverTimestamp = serverTimestamp
+ status.isStreaming = (obj.stream ~= nil)
+ status.isLooping = obj.isLooping
return status
end)
@@ -105,7 +110,7 @@
-- enable stream reads when decode buffer is not full
if status.decodeFull < status.decodeSize and self.stream then
- self.jnt:t_addRead(self.stream, self.rtask, 0) -- XXXX timeout?
+ self.jnt:t_addRead(self.stream, self.rtask, STREAM_READ_TIMEOUT)
end
if status.decodeState & DECODE_UNDERRUN ~= 0 or
@@ -229,10 +234,10 @@
log:info("connect streambuf")
local wtask = Task("streambufW", self, _streamWrite)
- self.jnt:t_addWrite(self.stream, wtask, 5)
+ self.jnt:t_addWrite(self.stream, wtask, STREAM_WRITE_TIMEOUT)
self.rtask = Task("streambufR", self, _streamRead)
- self.jnt:t_addRead(self.stream, self.rtask, 0) -- XXXX timeout?
+ self.jnt:t_addRead(self.stream, self.rtask, STREAM_READ_TIMEOUT)
self.slimproto:sendStatus('STMc')
end
@@ -349,6 +354,7 @@
self.sentDecoderUnderrunEvent = false
self.sentOutputUnderrunEvent = false
self.sentAudioUnderrunEvent = false
+ self.isLooping = false
-- connect to server
self:_streamConnect(serverIp, data.serverPort)
@@ -402,10 +408,10 @@
function _cont(self, data)
- log:info("cont loop=", data.loop)
+ log:debug("cont loop=", data.loop)
if data.loop == 1 then
- log:warn("LOOP")
+ self.isLooping = true
self.stream:markLoop()
end
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua?rev=3176&root=Jive&r1=3175&r2=3176&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua Tue
Oct 21 14:39:41 2008
@@ -45,6 +45,7 @@
local DNS = require("jive.net.DNS")
local Process = require("jive.net.Process")
+local debug = require("jive.utils.debug")
local log = require("jive.utils.log").logger("net.thread")
local perfhook = jive.perfhook
@@ -64,21 +65,22 @@
if not sock then
return
end
-
+
if not sockList[sock] then
-- add us if we're not already in there
table.insert(sockList, sock)
+
+ sockList[sock] = {
+ lastSeen = Framework:getTicks()
+ }
else
-- else remove previous task
sockList[sock].task:removeTask()
end
-
+
-- remember the pump, the time and the desired timeout
- sockList[sock] = {
- task = task,
- lastSeen = Framework:getTicks(),
- timeout = (timeout or 60) * 1000
- }
+ sockList[sock].task = task
+ sockList[sock].timeout = (timeout or 60) * 1000
end
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua?rev=3176&root=Jive&r1=3175&r2=3176&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua Tue Oct
21 14:39:41 2008
@@ -77,6 +77,7 @@
local DEVICEID = 7 -- XXXX using recevier device id
+local READ_TIMEOUT = 35
local WRITE_TIMEOUT = 10
-- connection state
@@ -136,12 +137,18 @@
uuidp[#uuidp + 1] = string.char(tonumber(v, 16))
end
+ local wlanList = 0
+ if data.reconnect then
+ -- reconnection bit
+ wlanList = wlanList | 0x4000
+ end
+
return {
packNumber(data.deviceID or DEVICEID, 1),
packNumber(data.revision, 1),
table.concat(macp),
table.concat(uuidp),
- packNumber(0, 2), -- XXXX reconnection bit
+ packNumber(wlanList, 2),
packNumber(0, 8), -- XXXX bytes received
"EN", -- XXXX language
}
@@ -346,8 +353,6 @@
-- Open the slimproto connection to SqueezeCenter.
function connect(self, serverip)
- assert(serverip)
-
local pump = function(NetworkThreadErr)
if NetworkThreadErr then
return _handleDisconnect(self, NetworkThreadErr)
@@ -402,14 +407,31 @@
if not statusSent then
self:sendStatus(opcode)
end
- end
-
- self.serverip = serverip
- self.socket = SocketTcp(self.jnt, serverip, PORT, "SlimProto")
+
+ -- any future connections to this server are reconnects
+ self.reconnect = true
+ end
+
+ if serverip then
+ self.serverip = serverip
+ self.reconnect = false
+ end
+
+ self.socket = SocketTcp(self.jnt, self.serverip, PORT, "SlimProto")
-- connect
self.socket:t_connect()
- self.socket:t_addRead(pump, 0) -- no timeout
+
+ -- SC and SN ping the player every 5 and 30 seconds respectively.
+ -- This timeout could be made shorter in the SC case.
+ self.socket:t_addRead(pump, READ_TIMEOUT)
+
+ -- the reconnect bit means that we have a running data connection
+ -- for this server or we're looping
+ local status = self.statusCallback(self, event, serverTimestamp)
+ self.heloPacket.reconnect =
+ self.reconnect and
+ (status.isStreaming or status.isLooping)
self.state = CONNECTED
@@ -428,7 +450,6 @@
self.socket:close()
self.socket = nil
- self.serverip = nil
end
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins