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