From 7fa218e04be309152e018c8758d26b157b4c8d2b Mon Sep 17 00:00:00 2001
From: Maxime Graulich <maxime.graulich@gmail.com>
Date: Tue, 30 Jun 2015 14:21:13 +0000
Subject: [PATCH] ONELAB2: clear the buffer

---
 contrib/onelab2/python/onelab2.py | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/contrib/onelab2/python/onelab2.py b/contrib/onelab2/python/onelab2.py
index de33fc26d4..7397f85add 100755
--- a/contrib/onelab2/python/onelab2.py
+++ b/contrib/onelab2/python/onelab2.py
@@ -212,7 +212,20 @@ class client :
       #self.socket.send(struct.pack('ii%is' %len(m), t, len(m), m))
 
   def _clearbuffer(self):
-    self.socket.recv(1024)
+    self.socket.settimeout(0.)
+    try:
+      msg = self.socket.recv(1024)
+    except socket.error:
+      self.socket.settimeout(None)
+      return
+    self.socket.settimeout(None)
+    if len(msg) >= 4:
+      v, t, l = struct.unpack('!BBH', msg[:4])
+      if t == self._ONELAB_MESSAGE :
+        print('onelab info : %s' % msg)
+      elif t == self._ONELAB_STOP :
+        print('server ask to stop')
+        os._exit(1)
 
   def _receive(self) :
     def buffered_receive(l) :
@@ -230,6 +243,9 @@ class client :
     msg = buffered_receive(l)
     if t == self._ONELAB_MESSAGE :
       print('onelab info : %s' % msg)
+    elif t == self._ONELAB_STOP:
+      print('server ask to stop')
+      os._exit(1)
     return t, msg
 
   def _parseParameter(msg):
@@ -274,6 +290,7 @@ class client :
         param.frombytes(msg)
       elif ptype == 0x0A and warn_if_not_found:
         print('Unknown parameter %s' %(param.name))
+    self._clearbuffer()
 
   def defineNumber(self, name, **param):
     if 'labels' in param :
@@ -363,7 +380,7 @@ class client :
     else:
       cmd = command + ' ' + arguments
     os.system(cmd);
-    self._numSubClients +=1
+    self._numSubClients += 1
     self.getString(name+'/Action', False)
 
   def runSubClient(self, name, command, arguments=''):
-- 
GitLab