更新39协议
更新webserivce功能
完善nettrans
diff --git a/supwisdom/protocol/smart999protocol.py b/supwisdom/protocol/smart999protocol.py
index 176b7a1..c5a8ee3 100644
--- a/supwisdom/protocol/smart999protocol.py
+++ b/supwisdom/protocol/smart999protocol.py
@@ -98,16 +98,18 @@
class ProtocolError(BaseException):
def __init__(self, msg):
- super(ProtocolError,self).__init__()
+ super(ProtocolError, self).__init__()
self.msg = msg
class Smart999Connection(object):
- def __init__(self, ip, port):
+ def __init__(self, ip, port, debug=1):
self.ip = ip
self.port = port
self.sock = None
- self.errmsg = None
+ self.errmsg = ""
+ self.debug = debug
+ self._last_exec_err = 0
def connect(self, timeout=10.0):
try:
@@ -115,12 +117,15 @@
sock.settimeout(timeout)
sock.connect((self.ip, self.port))
self.sock = sock
+ logging.info(u"连接[%s:%d]成功" % (self.ip, self.port))
return True
except socket.error, msg:
self.errmsg = unicode(msg)
+ logging.info(u"连接[%s:%d]失败[%s]" % (self.ip, self.port, self.errmsg))
return False
def disconnect(self):
+ self._last_exec_err = 0
if self.sock:
try:
self.sock.close()
@@ -132,12 +137,18 @@
return self.sock != None
def log(self, data):
+ if not self.debug:
+ return
try:
print "CMD[%s]" % codecs.encode(data, 'hex')
except:
pass
def send_command(self, request, response, timeout=10.0):
+ if not self.is_connected():
+ if not self.connect(timeout):
+ logging.error(u"尝试重连设备失败")
+ return False
protocol = Smart999Protocol()
cmd = protocol.pack(request)
self.log(cmd)
@@ -165,11 +176,15 @@
self.errmsg = u"接收数据未收到结束符"
return False
self.sock.settimeout(timeout - est)
+ self._last_exec_err = 0
except socket.error, msg:
- if msg.errno == errno.ECONNABORTED:
- self.sock.close()
- self.sock = None
+ if msg.errno != None and msg.errno != errno.EWOULDBLOCK:
+ self.disconnect()
logging.error(u"远程连接[%s]已关闭!" % self.ip)
+ else:
+ self._last_exec_err += 1
+ if self._last_exec_err > 50:
+ self.disconnect()
self.errmsg = unicode(msg)
return False
except Exception, ex: