Author: titmuss
Date: Wed Jun 18 03:33:44 2008
New Revision: 2584
URL: http://svn.slimdevices.com?rev=2584&root=Jive&view=rev
Log:
Bug: 6683
Description:
Keep state for the currentServer, and fix some state transitions.
Modified:
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/applets/SqueezeDiscovery/SqueezeDiscoveryApplet.lua
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
Modified:
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/applets/SqueezeDiscovery/SqueezeDiscoveryApplet.lua
URL:
http://svn.slimdevices.com/7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/applets/SqueezeDiscovery/SqueezeDiscoveryApplet.lua?rev=2584&root=Jive&r1=2583&r2=2584&view=diff
==============================================================================
---
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/applets/SqueezeDiscovery/SqueezeDiscoveryApplet.lua
(original)
+++
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/applets/SqueezeDiscovery/SqueezeDiscoveryApplet.lua
Wed Jun 18 03:33:44 2008
@@ -159,12 +159,8 @@
local function _squeezeCenterCleanup(self)
local now = Framework:getTicks()
- local currentPlayer = Player:getCurrentPlayer()
- local currentServer = currentPlayer and currentPlayer:getSlimServer()
-
for i, server in SlimServer.iterate() do
if not server:isConnected() and
- currentServer ~= server and
now - server:getLastSeen() > DISCOVERY_TIMEOUT then
log:info("Removing server ", server)
@@ -342,9 +338,7 @@
log:info("----")
log:info("State: ", self.state)
log:info("CurrentPlayer: ", currentPlayer)
- if currentPlayer then
- log:info("CurrentServer: ", currentPlayer:getSlimServer())
- end
+ log:info("CurrentServer: ", SlimServer:getCurrentServer())
log:info("Servers:")
for i, server in SlimServer.iterate() do
log:info("\t", server:getName(), " [", server:getIpPort(), "]
connected=", server:isConnected(), " timeout=", DISCOVERY_TIMEOUT - (now -
server:getLastSeen()))
@@ -375,8 +369,7 @@
-- disconnect from idle servers
function _idleDisconnect(self)
- local currentPlayer = Player:getCurrentPlayer()
- local currentServer = currentPlayer and currentPlayer:getSlimServer()
+ local currentServer = SlimServer:getCurrentServer()
for i, server in SlimServer:iterate() do
if server ~= currentServer then
Modified:
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
URL:
http://svn.slimdevices.com/7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua?rev=2584&root=Jive&r1=2583&r2=2584&view=diff
==============================================================================
---
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
(original)
+++
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
Wed Jun 18 03:33:44 2008
@@ -31,7 +31,7 @@
-- stuff we need
-local _assert, assert, setmetatable, tonumber, tostring, pairs, type =
_assert, assert, setmetatable, tonumber, tostring, pairs, type
+local _assert, assert, require, setmetatable, tonumber, tostring, pairs, type
= _assert, assert, require, setmetatable, tonumber, tostring, pairs, type
local os = require("os")
local math = require("math")
@@ -73,6 +73,10 @@
module(..., oo.class)
+-- we must load this after the module declartion to dependancy loops
+local SlimServer = require("jive.slim.SlimServer")
+
+
local DEVICE_IDS = {
[4] = "squeezebox2",
[5] = "transporter",
@@ -106,12 +110,15 @@
-- class method, sets the current player
function setCurrentPlayer(class, player)
- -- is the current player still active?
- if currentPlayer and currentPlayer ~= player and currentPlayer.lastSeen
== 0 then
- playerList[currentPlayer.id] = nil
- end
+ local lastCurrentPlayer = currentPlayer
currentPlayer = player
+ SlimServer:setCurrentServer(currentPlayer and currentPlayer.slimServer
or nil)
+
+ -- is the last current player still active?
+ if lastCurrentPlayer and lastCurrentPlayer.lastSeen == 0 then
+ lastCurrentPlayer:free()
+ end
-- notify even if the player has not changed
jnt:notify("playerCurrent", currentPlayer)
@@ -275,14 +282,13 @@
-- callback happens.
oldInfo.connected = false
- -- player is now available
- playerList[self.id] = self
-
-- add to new server
log:info(self, " new for ", slimServer)
self.slimServer = slimServer
self.slimServer:_addPlayer(self)
+ -- player is now available
+ playerList[self.id] = self
self.jnt:notify('playerNew', self)
end
@@ -328,7 +334,6 @@
-- player is now available
playerList[self.id] = self
-
self.jnt:notify('playerNew', self)
end
@@ -365,7 +370,6 @@
-- player is now available
playerList[self.id] = self
-
self.jnt:notify('playerNew', self)
end
@@ -384,19 +388,21 @@
return
end
- -- player is now longer seen
+ log:info(self, " delete for ", self.slimServer)
+
+ -- player is gone
self.lastSeen = 0
-
- log:info(self, " delete for ", self.slimServer)
-
- if self ~= currentPlayer then
- -- player is no longer active
- playerList[self.id] = nil
- end
-
self.jnt:notify('playerDelete', self)
+
+ if self == currentPlayer then
+ -- dont' delete state if this is the current player
+ return
+ end
+
+ -- player is no longer active
+ playerList[self.id] = nil
- if self.slimServer and self ~= currentPlayer then
+ if self.slimServer then
self:offStage()
self.slimServer:_deletePlayer(self)
Modified:
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
URL:
http://svn.slimdevices.com/7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua?rev=2584&root=Jive&r1=2583&r2=2584&view=diff
==============================================================================
---
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
(original)
+++
7.1/branches/discovery-refactor/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
Wed Jun 18 03:33:44 2008
@@ -32,7 +32,7 @@
-- our stuff
local _assert, assert, tostring, type, tonumber = _assert, assert, tostring,
type, tonumber
-local pairs, ipairs, setmetatable = pairs, ipairs, setmetatable
+local pairs, ipairs, require, setmetatable = pairs, ipairs, require,
setmetatable
local os = require("os")
local table = require("jive.utils.table")
@@ -42,7 +42,6 @@
local Comet = require("jive.net.Comet")
local HttpPool = require("jive.net.HttpPool")
-local Player = require("jive.slim.Player")
local Surface = require("jive.ui.Surface")
local RequestHttp = require("jive.net.RequestHttp")
local SocketHttp = require("jive.net.SocketHttp")
@@ -62,6 +61,10 @@
module(..., oo.class)
+-- we must load this after the module declartion to dependancy loops
+local Player = require("jive.slim.Player")
+
+
-- list of servers index by id. this weak table is used to enforce
-- object equality with the server name.
local serverIds = {}
@@ -70,6 +73,9 @@
-- list of servers, that are active
local serverList = {}
+-- current server
+local currentServer = nil
+
-- credential list for http auth
local credentials = {}
@@ -77,6 +83,25 @@
-- class function to iterate over all SqueezeCenters
function iterate(class)
return pairs(serverList)
+end
+
+
+-- class method to return current server
+function getCurrentServer(class)
+ return currentServer
+end
+
+
+-- class method to set the current server
+function setCurrentServer(class, server)
+ lastCurrentServer = currentServer
+
+ currentServer = server
+
+ -- is the current server still active, it not clean up?
+ if lastCurrentServer and lastCurrentServer.lastSeen == 0 then
+ lastCurrentServer:free()
+ end
end
@@ -244,7 +269,7 @@
jnt = jnt,
-- connection stuff
- lastSeen = false,
+ lastSeen = 0,
ip = false,
port = false,
@@ -300,9 +325,6 @@
-- task to fetch artwork while browsing
obj.artworkFetchTask = Task("artwork", obj, processArtworkQueue)
-
- -- notify we're here by caller in SlimServers
- jnt:notify('serverNew', obj)
return obj
end
@@ -352,9 +374,14 @@
end
end
+ local oldLastSeen = self.lastSeen
+ self.lastSeen = Framework:getTicks()
+
-- server is now active
- serverList[self.id] = self
- self.lastSeen = Framework:getTicks()
+ if oldLastSeen == 0 then
+ serverList[self.id] = self
+ self.jnt:notify('serverNew', self)
+ end
end
@@ -369,22 +396,27 @@
function free(self)
log:debug(self, ":free")
- -- notify we're gone
- self.jnt:notify("serverDelete", self)
-
-- clear cache
self.artworkCache:free()
self.artworkThumbIcons = {}
+ -- server is gone
+ self.lastSeen = 0
+ self.jnt:notify("serverDelete", self)
+
+ -- close connections
+ self:disconnect()
+
+ if self == currentServer then
+ -- dont' delete state if this is the current server
+ return
+ end
+
-- delete players
for id, player in pairs(self.players) do
player:free(self)
end
self.players = {}
-
- -- close connections
- self.comet:disconnect()
- self.artworkPool:close()
-- server is no longer active
serverList[self.id] = nil
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins