更新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: