@@ -6,36 +6,51 @@ public class BotControllersChainMiddleware : IUpdateHandler
66{
77 readonly ILogger < BotControllersChainMiddleware > _log ;
88 readonly ChainStorage _chainStorage ;
9+ readonly BotControllersInvoker _invoker ;
10+ readonly BotControllerHandlers _handlers ;
911
10- public BotControllersChainMiddleware ( ILogger < BotControllersChainMiddleware > log , ChainStorage chainStorage )
12+ public BotControllersChainMiddleware ( ILogger < BotControllersChainMiddleware > log , ChainStorage chainStorage , BotControllersInvoker invoker , BotControllerHandlers handlers )
1113 {
1214 _log = log ;
1315 _chainStorage = chainStorage ;
16+ _invoker = invoker ;
17+ _handlers = handlers ;
1418 }
1519
1620 public async Task HandleAsync ( IUpdateContext context , UpdateDelegate next , CancellationToken cancellationToken )
1721 {
18- var id = context . GetSafeChatId ( ) ;
19- if ( id != null )
22+ try
2023 {
21- var chain = _chainStorage . Get ( id . Value ) ;
22- if ( chain != null )
24+ var id = context . GetSafeChatId ( ) ;
25+ if ( id != null )
2326 {
24- _log . LogTrace ( "Found chain for user {userId}, triggered continue execution of chain" , id . Value ) ;
25- _chainStorage . Clear ( id . Value ) ;
26- if ( chain . Synchronizator != null )
27+ var chain = _chainStorage . Get ( id . Value ) ;
28+ if ( chain != null )
2729 {
28- chain . Synchronizator . SetResult ( context ) ;
30+ _log . LogTrace ( "Found chain for user {userId}, triggered continue execution of chain" , id . Value ) ;
31+ _chainStorage . Clear ( id . Value ) ;
32+ if ( chain . Synchronizator != null )
33+ {
34+ chain . Synchronizator . SetResult ( context ) ;
35+ }
36+ }
37+ else
38+ {
39+ await next ( context , cancellationToken ) ;
2940 }
3041 }
3142 else
3243 {
3344 await next ( context , cancellationToken ) ;
3445 }
3546 }
36- else
47+ catch ( ChainTimeoutException e )
3748 {
38- await next ( context , cancellationToken ) ;
49+ _log . LogDebug ( "Chain timeout reached for chat {chatId}" , context . GetChatId ( ) ) ;
50+ if ( ! e . Handled && _handlers . TryGetValue ( Handle . ChainTimeout , out var controller ) )
51+ {
52+ await _invoker . Invoke ( context , cancellationToken , controller ) ;
53+ }
3954 }
4055 }
4156}
0 commit comments