View difference between Paste ID: KtapYfM0 and 3HXN1Rvx
SHOW: | | - or go back to the newest paste.
1-
#!/usr/bin/python
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-
    server = ServerControl()
85+
    c = Control()