Bidirectional Networking

James Mills prologic at shortcircuit.net.au
Fri Dec 12 19:08:45 EST 2008


Just as a matter of completeness for my own suggestion, here
is my implementation of your code (using circuits):

cheers
James

--------------------------

import random
from circuits import listener, Event, Manager
from circuits.lib.sockets import TCPServer, TCPClient

class Server(TCPServer):

   channel = "server"

   @listener("read")
   def onREAD(self, sock, data):
      print "-> RECV: %s - Sent by: %s" % (data, hsot)

class Client(TCPClient):

   channel = "client"

   def __init__(self, remoteServer):
      super(Client, self).__init__()
      self.cycle = 0
      self.randomNumber = 0
      self.message = None
      self.remoteServer = remoteServer

   @listener("connect")
   def onCONNECT(self, host, port):
      self.write(self.message)
      print "SENT ->: %d by by local cycle %d" % (self.randomNumber, self.cycle)
      self.close()
      self.success = True

   @listener("disconnect")
   def onDISCONNECT(self):
      if not self.success:
         print "Failed to send number on cycle %d " % self.cycle
         self.success = None

   @listener("cycle")
   def onCYCLE(self):
      if self.cycle < 1000:
         chance = random.random()

         if (chance < 0.01):
            self.randomNumber = int(random.random() * 1000)
            self.message = "%d from remote cycle %d" % (self.randomNumber,
                  self.cycle)
            self.open(*self.remoteServer)
            self.cycle += 1

         manager.push(Event(), "cycle", "client")

localServer = (9999, "localhost")
remoteServer = ("localhost", 10000)

manager = Manager()

server = Server(*localServer)
client = Client(remoteServer)

manager += server
manager += client

manager.push(Event(), "cycle", "client")

while True:
   try:
      server.poll()
      client.poll()
      manager.flush()
   except KeyboardInterrupt:
      client.close()
      break



More information about the Python-list mailing list