@@ -76,6 +76,8 @@ public abstract class ModelBase : IFullModel
76
76
private readonly object m_eventLock = new object ( ) ;
77
77
private BasicReturnEventHandler m_basicReturn ;
78
78
private CallbackExceptionEventHandler m_callbackException ;
79
+
80
+ public ManualResetEvent m_flowControlBlock = new ManualResetEvent ( true ) ;
79
81
80
82
public event ModelShutdownEventHandler ModelShutdown
81
83
{
@@ -225,6 +227,7 @@ public virtual void OnModelShutdown(ShutdownEventArgs reason)
225
227
}
226
228
}
227
229
}
230
+ m_flowControlBlock . Set ( ) ;
228
231
}
229
232
230
233
public virtual void OnBasicReturn ( BasicReturnEventArgs args )
@@ -318,6 +321,9 @@ public bool IsOpen
318
321
319
322
public void ModelSend ( MethodBase method , ContentHeaderBase header , byte [ ] body )
320
323
{
324
+ if ( method . HasContent ) {
325
+ m_flowControlBlock . WaitOne ( ) ;
326
+ }
321
327
m_session . Transmit ( new Command ( method , header , body ) ) ;
322
328
}
323
329
@@ -381,6 +387,17 @@ public void HandleBasicReturn(ushort replyCode,
381
387
e . Body = body ;
382
388
OnBasicReturn ( e ) ;
383
389
}
390
+
391
+ public abstract void _Private_ChannelFlowOk ( ) ;
392
+
393
+ public void HandleChannelFlow ( bool active )
394
+ {
395
+ if ( active )
396
+ m_flowControlBlock . Set ( ) ;
397
+ else
398
+ m_flowControlBlock . Reset ( ) ;
399
+ _Private_ChannelFlowOk ( ) ;
400
+ }
384
401
385
402
public void HandleConnectionStart ( byte versionMajor ,
386
403
byte versionMinor ,
0 commit comments