[pypy-svn] r39717 - pypy/dist/pypy/lib/distributed
fijal at codespeak.net
fijal at codespeak.net
Fri Mar 2 17:08:17 CET 2007
Author: fijal
Date: Fri Mar 2 17:08:14 2007
New Revision: 39717
Modified:
pypy/dist/pypy/lib/distributed/socklayer.py
Log:
Make socklayer working (provided greensock2 is on path)
Modified: pypy/dist/pypy/lib/distributed/socklayer.py
==============================================================================
--- pypy/dist/pypy/lib/distributed/socklayer.py (original)
+++ pypy/dist/pypy/lib/distributed/socklayer.py Fri Mar 2 17:08:14 2007
@@ -1,5 +1,6 @@
from pypeers.pipe.gsocket import GreenSocket
+from pypeers.msgstruct import decodemessage, message
from socket import socket, AF_INET, SOCK_STREAM
import marshal
import sys
@@ -9,29 +10,39 @@
if TRACE:
print >>sys.stderr, msg
-def receive(conn):
- all = []
- data = conn.recv(10000)
- trace("received %s" % data)
- return marshal.loads(data)
-
-def send(conn, data):
- trace("sending %s" % (data,))
- conn.send(marshal.dumps(data))
- trace("done")
+class SocketWrapper(object):
+ def __init__(self, conn):
+ self.buffer = ""
+ self.conn = conn
+
+ def receive(self):
+ msg, self.buffer = decodemessage(self.buffer)
+ while msg is None:
+ self.buffer += self.conn.recv(8192)
+ msg, self.buffer = decodemessage(self.buffer)
+ assert msg[0] == 'c'
+ trace("received %s" % msg[1])
+ return marshal.loads(msg[1])
+
+ def send(self, data):
+ trace("sending %s" % (data,))
+ self.conn.sendall(message('c', marshal.dumps(data)))
+ trace("done")
-def socket_listener(address=('', 12121)):
+def socket_listener(address=('', 12122)):
s = GreenSocket(AF_INET, SOCK_STREAM)
s.bind(address)
s.listen(1)
print "Waiting for connection"
conn, addr = s.accept()
-
- return lambda data : send(conn, data), lambda : receive(conn)
+
+ sw = SocketWrapper(conn)
+ return sw.send, sw.receive
def socket_connecter(address):
s = GreenSocket(AF_INET, SOCK_STREAM)
print "Connecting %s" % (address,)
s.connect(address)
- return lambda data : send(s, data), lambda : receive(s)
+ sw = SocketWrapper(s)
+ return sw.send, sw.receive
More information about the Pypy-commit
mailing list