From 647a25dfdc4f0718b0cf686a403711458161387a Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Wed, 25 Mar 2009 23:10:02 +0000 Subject: [PATCH] Even better: have the base PeerManager call clientLoggedOn and clientLoggedOff for every client on another node when it connects or disconnects from that node. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5696 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../crowd/peer/server/CrowdPeerManager.java | 13 ---------- .../presents/peer/server/PeerManager.java | 26 ++++++++++++++----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/java/com/threerings/crowd/peer/server/CrowdPeerManager.java b/src/java/com/threerings/crowd/peer/server/CrowdPeerManager.java index 4b8f1a280..76ad194c0 100644 --- a/src/java/com/threerings/crowd/peer/server/CrowdPeerManager.java +++ b/src/java/com/threerings/crowd/peer/server/CrowdPeerManager.java @@ -184,19 +184,6 @@ public class CrowdPeerManager extends PeerManager } } - @Override // from PeerManager - protected void connectedToPeer (PeerNode peer) - { - super.connectedToPeer(peer); - - for (ClientInfo clinfo : peer.nodeobj.clients) { - if (clinfo instanceof CrowdClientInfo) { - CrowdClientInfo ccinfo = (CrowdClientInfo)clinfo; - _viztoauth.put(ccinfo.visibleName, ccinfo.username); - } - } - } - /** A mapping of visible name to username for all clients on all *remote* nodes. */ protected Map _viztoauth = Maps.newHashMap(); diff --git a/src/java/com/threerings/presents/peer/server/PeerManager.java b/src/java/com/threerings/presents/peer/server/PeerManager.java index 40c16feb5..d7a558a0d 100644 --- a/src/java/com/threerings/presents/peer/server/PeerManager.java +++ b/src/java/com/threerings/presents/peer/server/PeerManager.java @@ -1035,20 +1035,27 @@ public abstract class PeerManager */ protected void connectedToPeer (PeerNode peer) { + String nodeName = peer.getNodeName(); + // check for lock conflicts for (NodeObject.Lock lock : peer.nodeobj.locks) { PeerManager.LockHandler handler = _locks.get(lock); if (handler != null) { - log.warning("Client hijacked lock in process of resolution [handler=" + handler + - ", node=" + peer.getNodeName() + "]."); - handler.clientHijackedLock(peer.getNodeName()); + log.warning("Client hijacked lock in process of resolution", + "handler", handler, "node", nodeName); + handler.clientHijackedLock(nodeName); } else if (_nodeobj.locks.contains(lock)) { - log.warning("Client hijacked lock owned by this node [lock=" + lock + - ", node=" + peer.getNodeName() + "]."); + log.warning("Client hijacked lock owned by this node", + "lock", lock, "node", nodeName); droppedLock(lock); } } + + // indicate that all these clients have logged on + for (ClientInfo clinfo : peer.nodeobj.clients) { + clientLoggedOn(nodeName, clinfo); + } } /** @@ -1056,12 +1063,19 @@ public abstract class PeerManager */ protected void disconnectedFromPeer (PeerNode peer) { + String nodeName = peer.getNodeName(); + // clear any locks held by that peer for (LockHandler handler : _locks.values().toArray(new LockHandler[_locks.size()])) { - if (handler.getNodeName().equals(peer.getNodeName())) { + if (handler.getNodeName().equals(nodeName)) { handler.clientDidLogoff(); } } + + // indicate that these clients have left + for (ClientInfo clinfo : peer.nodeobj.clients) { + clientLoggedOff(nodeName, clinfo); + } } /**