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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user