Mercurial > cosocket
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 |
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 | 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 |