Advertisement
Guest User

Untitled

a guest
Jan 30th, 2014
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.52 KB | None | 0 0
  1. import errno
  2. import socket
  3. import time
  4.  
  5. class TCPClient(object):
  6.   def __init__(self, sock, addr):
  7.     self.addr = addr
  8.     self.socket = sock
  9.  
  10.   def recv(self, buffsize):
  11.     try:
  12.       data = self.socket.recv(buffsize)
  13.       if not data:
  14.         return -1
  15.       return data
  16.     except socket.error as err:
  17.       if err.errno != errno.EWOULDBLOCK:
  18.         raise
  19.  
  20. class TCPSocket(object):
  21.   def __init__(self):
  22.     self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  23.     self.socket.setblocking(False)
  24.     self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
  25.  
  26.   def accept(self):
  27.     try:
  28.       client = self.socket.accept()
  29.       return TCPClient(client[0], client[1])
  30.     except socket.error as err:
  31.       if err.errno != errno.EWOULDBLOCK:
  32.         raise
  33.  
  34. class Server(object):
  35.   def __init__(self):
  36.     self.connections = []
  37.     self.tcp = TCPSocket()
  38.  
  39.   def send_all(self, data, ignore=None):
  40.     for conn in self.connections:
  41.       if conn is ignore:
  42.         continue
  43.       else:
  44.         conn.socket.send(data)
  45.  
  46.   def listen(self, ip, port):
  47.     self.tcp.socket.bind((ip,port))
  48.     self.tcp.socket.listen(5)
  49.  
  50.     while True:
  51.       conn = self.tcp.accept()
  52.       if conn:
  53.         self.connections.append(conn)
  54.  
  55.       dropped = []
  56.       for conn in self.connections:
  57.         data = conn.recv(10240)
  58.         if data == -1:
  59.           dropped.append(conn)
  60.         else:
  61.           if data == "<policy-file-request/>\0":
  62.             conn.socket.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*" secure="false" /></cross-domain-policy>\0')
  63.           elif data:
  64.             if data == "hello\0":
  65.               conn.socket.send("selfconn|{}\0".format(conn.addr))
  66.               self.send_all("conn|{}\0".format(conn.addr), conn)
  67.             elif data == "getusers\0":
  68.               result = ""
  69.               for monkey in self.connections:
  70.                 if monkey is conn:
  71.                   continue
  72.                 else:
  73.                   result += "{}|".format(monkey.addr)
  74.               conn.socket.send("users|{}\0".format(result[:-1]))
  75.             elif data[0:2] == "go":
  76.               self.send_all("move|{}|{}\0".format(data[3:-1], conn.addr))
  77.             elif data[0:4] == "stop":
  78.               temp = data[5:-1].split("_")
  79.               self.send_all("stop|{}|{}|{}\0".format(temp[0], temp[1], conn.addr))
  80.  
  81.       for conn in dropped:
  82.         self.connections.remove(conn)
  83.  
  84.  
  85. server = Server()
  86. server.listen("192.168.1.100", 843)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement