Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2011-10-25 13:06:52 +0000
committerAnton Leherbauer2011-10-25 13:07:25 +0000
commit6a414bbfe9da869e7c3d0102c90bd43f334984cb (patch)
tree04f79119a2f6eff8523cb6e1ebfc92b42595fdbe /python/src
parentedc33478aa7403e4457a23a44456a1657ed7156c (diff)
downloadorg.eclipse.tcf-6a414bbfe9da869e7c3d0102c90bd43f334984cb.tar.gz
org.eclipse.tcf-6a414bbfe9da869e7c3d0102c90bd43f334984cb.tar.xz
org.eclipse.tcf-6a414bbfe9da869e7c3d0102c90bd43f334984cb.zip
TCF Python: Fixed channel redirect
Diffstat (limited to 'python/src')
-rw-r--r--python/src/tcf/channel/AbstractChannel.py17
-rw-r--r--python/src/tcf/services/local/LocatorService.py2
-rw-r--r--python/src/tcf/services/remote/LocatorProxy.py37
3 files changed, 31 insertions, 25 deletions
diff --git a/python/src/tcf/channel/AbstractChannel.py b/python/src/tcf/channel/AbstractChannel.py
index e8b27922c..b1d1d5427 100644
--- a/python/src/tcf/channel/AbstractChannel.py
+++ b/python/src/tcf/channel/AbstractChannel.py
@@ -251,6 +251,11 @@ class AbstractChannel(object):
Redirect this channel to given peer using this channel remote peer locator service as a proxy.
@param peer_attrs - peer that will become new remote communication endpoint of this channel
"""
+ if isinstance(peer_attrs, str):
+ # support for redirect(peerId)
+ map = {}
+ map[peer.ATTR_ID] = peer_attrs
+ peer_attrs = map
channel = self
assert protocol.isDispatchThread()
if self.state == STATE_OPENING:
@@ -264,19 +269,19 @@ class AbstractChannel(object):
self.remote_peer.getID() + " has no locator service")
peer_id = peer_attrs.get(peer.ATTR_ID)
if peer_id and len(peer_attrs) == 1:
- peer = l.getPeers().get(peer_id)
- if not peer:
+ _peer = l.getPeers().get(peer_id)
+ if not _peer:
# Peer not found, must wait for a while until peer is discovered or time out
class Callback(object):
found = None
def __call__(self):
if self.found: return
- self.channel.terminate(Exception("Peer " + peer_id + " not found"))
+ channel.terminate(Exception("Peer " + peer_id + " not found"))
cb = Callback()
protocol.invokeLaterWithDelay(locator.DATA_RETENTION_PERIOD / 3, cb)
class Listener(locator.LocatorListener):
- def peerAdded(self, peer):
- if peer.getID() == peer_id:
+ def peerAdded(self, new_peer):
+ if new_peer.getID() == peer_id:
cb.found = True
channel.state = STATE_OPEN
l.removeListener(self)
@@ -289,7 +294,7 @@ class AbstractChannel(object):
channel.redirect_command = None
if channel.state != STATE_OPENING: return
if exc: channel.terminate(exc)
- channel.remote_peer = peer
+ channel.remote_peer = _peer
channel.remote_service_by_class.clear()
channel.remote_service_by_name.clear()
channel.event_listeners.clear()
diff --git a/python/src/tcf/services/local/LocatorService.py b/python/src/tcf/services/local/LocatorService.py
index e2c3bf0bc..8cff0c797 100644
--- a/python/src/tcf/services/local/LocatorService.py
+++ b/python/src/tcf/services/local/LocatorService.py
@@ -757,7 +757,7 @@ class LocatorService(locator.LocatorService):
def addListener(self, listener):
assert listener is not None
assert protocol.isDispatchThread()
- self.listeners.add(listener)
+ self.listeners.append(listener)
def removeListener(self, listener):
assert protocol.isDispatchThread()
diff --git a/python/src/tcf/services/remote/LocatorProxy.py b/python/src/tcf/services/remote/LocatorProxy.py
index 89fff33d9..8072118c1 100644
--- a/python/src/tcf/services/remote/LocatorProxy.py
+++ b/python/src/tcf/services/remote/LocatorProxy.py
@@ -32,33 +32,33 @@ class ChannelEventListener(channel.EventListener):
args = channel.fromJSONSequence(data)
if name == "peerAdded":
assert len(args) == 1
- peer = Peer(self.channel.getRemotePeer(), args[0])
- if self.proxy.peers.get(peer.getID()):
+ _peer = Peer(self.channel.getRemotePeer(), args[0])
+ if self.proxy.peers.get(_peer.getID()):
protocol.log("Invalid peerAdded event", Exception())
return
- self.proxy.peers[peer.getID()] = peer
+ self.proxy.peers[_peer.getID()] = _peer
for l in self.proxy.listeners:
try:
- l.peerAdded(peer)
+ l.peerAdded(_peer)
except Exception as x:
protocol.log("Unhandled exception in Locator listener", x)
elif name == "peerChanged":
assert len(args) == 1
m = args[0]
if not m: raise Exception("Locator service: invalid peerChanged event - no peer ID")
- peer = self.proxy.peers.get(m.get(peer.ATTR_ID))
- if not peer: return
- self.proxy.peers[peer.getID()] = peer
+ _peer = self.proxy.peers.get(m.get(peer.ATTR_ID))
+ if not _peer: return
+ self.proxy.peers[_peer.getID()] = _peer
for l in self.proxy.listeners:
try:
- l.peerChanged(peer)
+ l.peerChanged(_peer)
except Exception as x:
protocol.log("Unhandled exception in Locator listener", x)
elif name == "peerRemoved":
assert len(args) == 1
id = args[0]
- peer = self.proxy.peers.get(id)
- if not peer: return
+ _peer = self.proxy.peers.get(id)
+ if not _peer: return
del self.proxy.peers[id]
for l in self.proxy.listeners:
try:
@@ -68,8 +68,8 @@ class ChannelEventListener(channel.EventListener):
elif name == "peerHeartBeat":
assert len(args) == 1
id = args[0]
- peer = self.proxy.peers.get(id)
- if not peer: return
+ _peer = self.proxy.peers.get(id)
+ if not _peer: return
for l in self.proxy.listeners:
try:
l.peerHeartBeat(id)
@@ -92,12 +92,12 @@ class LocatorProxy(locator.LocatorService):
def getPeers(self):
return self.peers
- def redirect(self, peer, done):
+ def redirect(self, _peer, done):
done = self._makeCallback(done)
service = self
class RedirectCommand(Command):
def __init__(self):
- super(RedirectCommand, self).__init__(service.channel, service, "redirect", [peer])
+ super(RedirectCommand, self).__init__(service.channel, service, "redirect", [_peer])
def done(self, error, args):
if not error:
assert len(args) == 1
@@ -117,7 +117,7 @@ class LocatorProxy(locator.LocatorService):
return SyncCommand().token
def addListener(self, listener):
- self.listeners.add(listener)
+ self.listeners.append(listener)
if not self.get_peers_done:
service = self
class GetPeersCommand(Command):
@@ -135,13 +135,14 @@ class LocatorProxy(locator.LocatorService):
for m in c:
id = m.get(peer.ATTR_ID)
if service.peers.get(id): continue;
- peer = Peer(service.channel.getRemotePeer(), m)
- service.peers[id] = peer
+ _peer = Peer(service.channel.getRemotePeer(), m)
+ service.peers[id] = _peer
for l in service.listeners:
try:
- l.peerAdded(peer)
+ l.peerAdded(_peer)
except Exception as x:
protocol.log("Unhandled exception in Locator listener", x)
+ GetPeersCommand()
self.get_peers_done = True
def removeListener(self, listener):

Back to the top