Guest User

server.py

a guest
Jan 8th, 2014
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.38 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import socket
  4. from threading import Thread
  5. from Queue import Queue
  6. from time import sleep
  7. import json
  8.            
  9. class ClientThread(Thread):
  10.     def __init__(self, connection):
  11.         super(ClientThread, self).__init__()
  12.        
  13.         self.recv = connection.recv
  14.         self.send = connection.send
  15.         self.que = Queue()
  16.        
  17.     def run(self):
  18.         while True:
  19.             cmd = self.que.get()
  20.             self.send(json.dumps(cmd))
  21.             if cmd == 'exit':
  22.                 break
  23.  
  24. class ServerControl:
  25.     def __init__(self):
  26.         print 'Started server script.'
  27.         self.start()
  28.    
  29.     def start(self):
  30.         b = BulletServer()
  31.         b.start()
  32.        
  33.         self.que = b.que
  34.         self.loop()
  35.        
  36.     def loop(self):
  37.         while True:
  38.             cmd = raw_input('> ')
  39.             if cmd == 'exit':
  40.                 self.que.put(cmd)
  41.                 break
  42.             else:
  43.                 self.que.put(cmd)
  44.            
  45. class BulletServer(Thread):
  46.     clients = []
  47.     def __init__(self):
  48.         super(BulletServer, self).__init__()
  49.         self.que = Queue()
  50.        
  51.     def run(self):
  52.         self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  53.         self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  54.         server_address = ("localhost", 9006)
  55.        
  56.         self.server.bind(server_address)
  57.         self.server.listen(5)
  58.        
  59.         while True:
  60.             if not self.que.empty():
  61.                 cmd = self.que.get()
  62.                
  63.                 if cmd.split(' ')[0] == 'accept':
  64.                     self.loop(int(cmd.split(' ')[1]))
  65.                     continue
  66.                
  67.                 for client in self.clients:
  68.                     client.que.put(cmd)
  69.                    
  70.                 if cmd == 'exit':
  71.                     break
  72.             else:
  73.                 sleep(0.1)
  74.            
  75.         for client in self.clients:
  76.             client.join()
  77.    
  78.     def loop(self, iterations):
  79.         for i in xrange(iterations):
  80.             #print '\nAwaiting %i clients.' % num
  81.             connection, client_address = self.server.accept()
  82.             c = ClientThread(connection)
  83.             self.clients.append(c)
  84.             c.start()
  85.            
  86. if __name__ == '__main__':            
  87.     server = ServerControl()
Advertisement
Add Comment
Please, Sign In to add comment