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. */
protected Map<Name, Name> _viztoauth = Maps.newHashMap();
@@ -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);
}
}
/**