annotate channels.py @ 50:f78b986ecb6e

OWC now remembers your name.
author Atul Varma <varmaa@toolness.com>
date Tue, 28 Apr 2009 19:08:16 +0000
parents 425776983cf2
children b0f802c4fafc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
1 import cosocket
16
4b3a30d863cc Added some TODOs.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
2
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 _channels = {}
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 class until_message_sent(object):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 def __init__(self, channel_name, message):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 self.channel_name = channel_name
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 self.message = message
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 def execute(self, dispatcher):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 if self.channel_name in _channels:
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
12 receivers = _channels[self.channel_name].values()
20
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
13 del _channels[self.channel_name]
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
14 for receiver in receivers:
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
15 receiver.continue_from_yield(self.message)
21
b77e679ce993 Renamed return_from_yield() to continue_from_yield().
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
16 dispatcher.continue_from_yield()
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
18 class _until_message_received(object):
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 def __init__(self, channel_name):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 self.channel_name = channel_name
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
21 self._fd = None
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 def execute(self, dispatcher):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24 if self.channel_name not in _channels:
22
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
25 _channels[self.channel_name] = {}
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
26 self._fd = dispatcher.socket.fileno()
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
27 _channels[self.channel_name][self._fd] = dispatcher
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
28
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
29 def abort(self):
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
30 if (self.channel_name in _channels and
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
31 self._fd in _channels[self.channel_name]):
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
32 del _channels[self.channel_name][self._fd]
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
33
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
34 def until_message_received(channel_name):
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
35 instruction = _until_message_received(channel_name)
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
36 try:
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
37 message = yield instruction
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
38 yield cosocket.return_value(message)
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
39 except GeneratorExit:
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
40 instruction.abort()
425776983cf2 Removed the weakref mechanism from channels.py and instead turned until_message_received() into a generator rather than an object. Added a return_value() instruction to cosocket.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
41 raise