@@ -1616,9 +1616,7 @@ def __Setup10(self):
16161616 return (1 )
16171617
16181618
1619- def __Dispatch10 (self , cb , priv = None ):
1620- self ._cb = cb
1621- self ._priv = priv
1619+ def __Dispatch10 (self , groupcount ):
16221620 while True :
16231621 if not self .vslq :
16241622 # Reconnect VSM
@@ -1636,12 +1634,21 @@ def __Dispatch10(self, cb, priv=None):
16361634 self .vslq = self .lva .VSLQ_New (
16371635 self .vsl , c , self .__g_arg , self .__q_arg )
16381636 self .error = 'Log reacquired'
1637+
1638+ self ._wrkcb = False
16391639 i = self .lva .VSLQ_Dispatch (
16401640 self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
16411641
16421642 if i == 1 :
1643- continue
1644- elif i > - 2 :
1643+ if self ._groupcb and self ._wrkcb :
1644+ self ._wrkcb = False
1645+ self ._groupcb (self , self ._priv )
1646+ if groupcount != 1 :
1647+ if groupcount > 1 :
1648+ groupcount -= 1
1649+ continue
1650+
1651+ if i > - 2 :
16451652 return i
16461653 if not self .vsm :
16471654 return i
@@ -1657,9 +1664,7 @@ def __Dispatch10(self, cb, priv=None):
16571664 self .error = "Log overrun"
16581665 return i
16591666
1660- def __Dispatch20 (self , cb , priv = None ):
1661- self ._cb = cb
1662- self ._priv = priv
1667+ def __Dispatch20 (self , groupcount ):
16631668 while True :
16641669 if self .vsm :
16651670 stat = self .lva .VSM_Status (self .vsm )
@@ -1679,12 +1684,20 @@ def __Dispatch20(self, cb, priv=None):
16791684 self .hascursor = 1
16801685 self .lva .VSLQ_SetCursor (self .vslq , byref (cast (c , c_void_p )))
16811686
1687+ self ._wrkcb = False
16821688 i = self .lva .VSLQ_Dispatch (
16831689 self .vslq , VSLQ_dispatch_f (self ._callBack ), None )
1684-
1690+
16851691 if i == 1 :
1686- continue
1687- elif i > - 2 :
1692+ if self ._groupcb and self ._wrkcb :
1693+ self ._wrkcb = False
1694+ self ._groupcb (self , self ._priv )
1695+ if groupcount != 1 :
1696+ if groupcount > 1 :
1697+ groupcount -= 1
1698+ continue
1699+
1700+ if i > - 2 :
16881701 return i
16891702 if not self .vsm :
16901703 return i
@@ -1698,11 +1711,14 @@ def __Dispatch20(self, cb, priv=None):
16981711 self .error = "Log overrun"
16991712 return i
17001713
1701- def Dispatch (self , cb , priv = None ):
1714+ def Dispatch (self , cb , priv = None , groupcount = 1 , groupcb = None ):
1715+ self ._cb = cb
1716+ self ._priv = priv
1717+ self ._groupcb = groupcb
17021718 if self .lva .apiversion >= 2.0 :
1703- return self .__Dispatch20 (cb , priv )
1719+ return self .__Dispatch20 (groupcount )
17041720 else :
1705- return self .__Dispatch10 (cb , priv )
1721+ return self .__Dispatch10 (groupcount )
17061722
17071723 def Fini (self ):
17081724 if self .vslq :
@@ -1720,6 +1736,7 @@ def __VSLQ_Name2Grouping(self, arg):
17201736 return self .lva .VSLQ_Name2Grouping (arg , - 1 )
17211737
17221738 def _callBack (self , vsl , pt , fo ):
1739+ self ._wrkcb = True
17231740 idx = - 1
17241741 while 1 :
17251742 idx += 1
0 commit comments