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
This commit is contained in:
Ray Greenwell
2009-03-25 23:10:02 +00:00
parent 4a5136d3f0
commit 647a25dfdc
2 changed files with 20 additions and 19 deletions
@@ -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. */ /** A mapping of visible name to username for all clients on all *remote* nodes. */
protected Map<Name, Name> _viztoauth = Maps.newHashMap(); protected Map<Name, Name> _viztoauth = Maps.newHashMap();
@@ -1035,20 +1035,27 @@ public abstract class PeerManager
*/ */
protected void connectedToPeer (PeerNode peer) protected void connectedToPeer (PeerNode peer)
{ {
String nodeName = peer.getNodeName();
// check for lock conflicts // check for lock conflicts
for (NodeObject.Lock lock : peer.nodeobj.locks) { for (NodeObject.Lock lock : peer.nodeobj.locks) {
PeerManager.LockHandler handler = _locks.get(lock); PeerManager.LockHandler handler = _locks.get(lock);
if (handler != null) { if (handler != null) {
log.warning("Client hijacked lock in process of resolution [handler=" + handler + log.warning("Client hijacked lock in process of resolution",
", node=" + peer.getNodeName() + "]."); "handler", handler, "node", nodeName);
handler.clientHijackedLock(peer.getNodeName()); handler.clientHijackedLock(nodeName);
} else if (_nodeobj.locks.contains(lock)) { } else if (_nodeobj.locks.contains(lock)) {
log.warning("Client hijacked lock owned by this node [lock=" + lock + log.warning("Client hijacked lock owned by this node",
", node=" + peer.getNodeName() + "]."); "lock", lock, "node", nodeName);
droppedLock(lock); 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) protected void disconnectedFromPeer (PeerNode peer)
{ {
String nodeName = peer.getNodeName();
// clear any locks held by that peer // clear any locks held by that peer
for (LockHandler handler : _locks.values().toArray(new LockHandler[_locks.size()])) { for (LockHandler handler : _locks.values().toArray(new LockHandler[_locks.size()])) {
if (handler.getNodeName().equals(peer.getNodeName())) { if (handler.getNodeName().equals(nodeName)) {
handler.clientDidLogoff(); handler.clientDidLogoff();
} }
} }
// indicate that these clients have left
for (ClientInfo clinfo : peer.nodeobj.clients) {
clientLoggedOff(nodeName, clinfo);
}
} }
/** /**