080-jsongateway.py

来自「this code is used for edit on os of s60」· Python 代码 · 共 68 行

PY
68
字号
import SocketServer, threading, jsonconn = {}conn_lock = threading.Lock()class ThreadingServer(SocketServer.ThreadingMixIn,\                      SocketServer.TCPServer):    allow_reuse_address = Trueclass Handler(SocketServer.StreamRequestHandler):    def handle(self):        print "A new client connected", self.client_address        msg = json.read_stream(self.rfile)        if "!name" in msg:            name = msg["!name"]            wlock = threading.Lock()            conn_lock.acquire()            conn[name] = (wlock, self.wfile)            conn_lock.release()            print "Client registered (%s)" % name            reply = {"ok": u"registered"}            self.wfile.write(json.write(reply))            self.wfile.flush()        else:             reply = {"err": u"invalid name"}            self.wfile.write(json.write(reply))            return        self.handle_connection(name)    def handle_connection(self, name):                    while True:            try:                msg = json.read_stream(self.rfile)            except:                msg = {"!close": True}            if "!close" in msg:                print "Client exits (%s): %s" %\                      (name, self.client_address)                conn_lock.acquire()                if name in conn:                        del conn[name]                conn_lock.release()                break            elif "!dst" in msg:                wfile = None                conn_lock.acquire()                if msg["!dst"] in conn:                    wlock, wfile = conn[msg["!dst"]]                conn_lock.release()                if wfile:                       wlock.acquire()                    try:                        wfile.write(json.write(msg))                        wfile.flush()                    finally:                        wlock.release()server = ThreadingServer(('', 9000), Handler)print "JSON gateway is running!"print "Waiting for new clients..."server.serve_forever()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?