@@ -201,9 +201,9 @@ public void Save()
201201 var key = pair . Key ;
202202 var curValue = pair . Value ;
203203
204- if ( ! _historyStates . TryGetValue ( key , out var historyValue )
205- || historyValue == null
206- || historyValue . Values . IsNullOrEmpty ( )
204+ if ( ! _historyStates . TryGetValue ( key , out var historyValue )
205+ || historyValue == null
206+ || historyValue . Values . IsNullOrEmpty ( )
207207 || ! curValue . Versioning )
208208 {
209209 states . Add ( curValue ) ;
@@ -232,8 +232,9 @@ public bool RemoveState(string name)
232232 if ( ! ContainsState ( name ) ) return false ;
233233
234234 var routingCtx = _services . GetRequiredService < IRoutingContext > ( ) ;
235- var leafNode = _curStates [ name ] . Values ? . LastOrDefault ( ) ;
236- if ( leafNode == null ) return false ;
235+ var value = _curStates [ name ] ;
236+ var leafNode = value ? . Values ? . LastOrDefault ( ) ;
237+ if ( value == null || ! value . Versioning || leafNode == null ) return false ;
237238
238239 _curStates [ name ] . Values . Add ( new StateValue
239240 {
@@ -246,6 +247,24 @@ public bool RemoveState(string name)
246247 UpdateTime = DateTime . UtcNow
247248 } ) ;
248249
250+ var hooks = _services . GetServices < IConversationHook > ( ) ;
251+ foreach ( var hook in hooks )
252+ {
253+ hook . OnStateChanged ( new StateChangeModel
254+ {
255+ ConversationId = _conversationId ,
256+ MessageId = routingCtx . MessageId ,
257+ Name = name ,
258+ BeforeValue = leafNode . Data ,
259+ BeforeActiveRounds = leafNode . ActiveRounds ,
260+ AfterValue = null ,
261+ AfterActiveRounds = leafNode . ActiveRounds ,
262+ DataType = leafNode . DataType ,
263+ Source = leafNode . Source ,
264+ Readonly = _curStates [ name ] . Readonly
265+ } ) . Wait ( ) ;
266+ }
267+
249268 return true ;
250269 }
251270
0 commit comments