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

Reply via email to