Advertisement
Guest User

server.py

a guest
Jan 8th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env 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 Control:
  25.     def __init__(self):
  26.         print 'Started server script.'
  27.  
  28.         s = Server()
  29.         s.start()
  30.        
  31.         self.que = s.que
  32.         self.loop()
  33.        
  34.     def loop(self):
  35.         while True:
  36.             cmd = raw_input('> ')
  37.             if cmd == 'exit':
  38.                 self.que.put(cmd)
  39.                 break
  40.             else:
  41.                 self.que.put(cmd)
  42.            
  43. class Server(Thread):
  44.     clients = []
  45.     def __init__(self):
  46.         super(Server, self).__init__()
  47.         self.que = Queue()
  48.        
  49.     def run(self):
  50.         self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  51.         self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  52.         server_address = ("localhost", 9006)
  53.        
  54.         self.server.bind(server_address)
  55.         self.server.listen(5)
  56.        
  57.         while True:
  58.             if not self.que.empty():
  59.                 cmd = self.que.get()
  60.                
  61.                 if cmd.split(' ')[0] == 'accept':
  62.                     self.loop(int(cmd.split(' ')[1]))
  63.                     continue
  64.                
  65.                 for client in self.clients:
  66.                     client.que.put(cmd)
  67.                    
  68.                 if cmd == 'exit':
  69.                     break
  70.             else:
  71.                 sleep(0.1)
  72.            
  73.         for client in self.clients:
  74.             client.join()
  75.    
  76.     def loop(self, iterations):
  77.         for i in xrange(iterations):
  78.             #print '\nAwaiting %i clients.' % num
  79.             connection, client_address = self.server.accept()
  80.             c = ClientThread(connection)
  81.             self.clients.append(c)
  82.             c.start()
  83.            
  84. if __name__ == '__main__':            
  85.     c = Control()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement