Skip to content

Instantly share code, notes, and snippets.

@Mavlarn
Created March 11, 2013 10:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Mavlarn/5133401 to your computer and use it in GitHub Desktop.
Save Mavlarn/5133401 to your computer and use it in GitHub Desktop.
# -*- coding:utf-8 -*-
from io.socket import IOCallback
from java.util.concurrent.locks import ReentrantLock
from io.socket import SocketIO
# it use socket.io java client of: https://github.com/Gottox/socket.io-java-client
class BlockingSocketIO(IOCallback):
respMsg = "";
def __init__(self, url, logger):
logger.info("init with url: %s" % url)
self.transportLock = ReentrantLock()
self.responseCondition = self.transportLock.newCondition()
self.socketIO = SocketIO(url, self)
self.logger = logger;
def sendAndRcv(self, message):
try:
self.transportLock.lock()
self.socketIO.send(message)
self.respMsg = ""
self.responseCondition.await()
return self.respMsg
except Exception, err:
self.logger.error(err.message)
finally:
self.transportLock.unlock()
return self.respMsg;
def emitAndRcv(self, event, message):
try:
self.transportLock.lock();
self.socketIO.emit(event, message)
self.respMsg = ""
self.responseCondition.await()
return self.respMsg
except Exception, err:
self.logger.error(err.message)
finally:
self.transportLock.unlock()
return self.respMsg;
def onConnect(self):
self.logger.info("connected")
def onDisconnect(self):
self.logger.info("disconnect")
def onMessage(self, data, acknowledge):
self.logger.info("message")
setResponse(data)
def on(self, event, acknowledge, args):
self.logger.info("Server triggered event: %s" % event)
for x in args:
self.logger.info("args: %s" % x)
respStr = ",".join(x.toString() for x in args)
self.setResponse(respStr)
def onError(self, exception):
self.logger.error("error:%s" % exception.getMessage())
def setResponse(self, data):
self.logger.info("Server said: %s" % data)
try:
self.transportLock.lock()
self.respMsg = data
self.responseCondition.signal()
finally:
self.transportLock.unlock()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment