コード例 #1
0
 /// <summary>
 /// Asynchronously saves all changes made in this context to the underlying database.
 /// </summary>
 /// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param>
 /// <returns>
 /// A task that represents the asynchronous save operation.
 /// The task result contains the number of objects written to the underlying database.
 /// </returns>
 /// <remarks>
 /// Multiple active operations on the same context instance are not supported.  Use 'await' to ensure
 /// that any asynchronous operations have completed before calling another method on this context.
 /// </remarks>
 public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
 {
     var hookExecution = new HookRunner(this);
     hookExecution.RunPreActionHooks();
     var result = await base.SaveChangesAsync(cancellationToken);
     hookExecution.RunPostActionHooks();
     return result;
 }
コード例 #2
0
ファイル: HookedDbContext.cs プロジェクト: Atrejoe/EFHooks
 /// <summary>
 /// Saves all changes made in this context to the underlying database.
 /// </summary>
 /// <returns>
 /// The number of objects written to the underlying database.
 /// </returns>
 public override int SaveChanges()
 {
     var hookExecution = new HookRunner(this);
     hookExecution.RunPreActionHooks();
     var result = base.SaveChanges();
     hookExecution.RunPostActionHooks();
     return result;
 }
コード例 #3
0
        private void DoExecute(CommandModel cmd)
        {
            Trace.Call(cmd);

            var handled = false;

            if (cmd.IsCommand)
            {
                switch (cmd.Command)
                {
                case "exec":
                    CommandExec(cmd);
                    handled = true;
                    break;

                case "echo":
                    CommandEcho(cmd);
                    handled = true;
                    break;

                case "benchmark_message_builder":
                    CommandBenchmarkMessageBuilder(cmd);
                    handled = true;
                    break;

                case "exception":
                    throw new Exception("You asked for it.");
                }
            }
            if (handled)
            {
                // no need to send the command to the engine
                return;
            }

            DateTime start, stop;

            start = DateTime.UtcNow;

            handled = f_Session.Command(cmd);
            IProtocolManager pm = null;

            if (!handled)
            {
                if (cmd.Chat is SessionChatModel && cmd.FrontendManager != null)
                {
                    pm = cmd.FrontendManager.CurrentProtocolManager;
                }
                else
                {
                    pm = cmd.Chat.ProtocolManager;
                }

                // we maybe have no network manager yet
                if (pm != null)
                {
                    handled = pm.Command(cmd);
                }
                else
                {
                    handled = false;
                }
            }
            if (!handled)
            {
                var filteredCmd = IOSecurity.GetFilteredPath(cmd.Command);
                var hooks       = new HookRunner("frontend", "command-manager",
                                                 "command-" + filteredCmd);
                hooks.EnvironmentVariables.Add("FRONTEND_VERSION", FrontendVersion);
                hooks.Environments.Add(new CommandHookEnvironment(cmd));
                hooks.Environments.Add(new ChatHookEnvironment(cmd.Chat));
                if (pm != null)
                {
                    hooks.Environments.Add(new ProtocolManagerHookEnvironment(pm));
                }

                var cmdChar = (string)f_Session.UserConfig["Interface/Entry/CommandCharacter"];
                hooks.Commands.Add(new SessionHookCommand(f_Session, cmd.Chat, cmdChar));
                if (pm != null)
                {
                    hooks.Commands.Add(new ProtocolManagerHookCommand(pm, cmd.Chat, cmdChar));
                }

                // show time
                hooks.Init();
                if (hooks.HasHooks)
                {
                    hooks.Run();
                    handled = true;
                }
            }
            if (!handled)
            {
                Unknown(cmd);
            }

            stop = DateTime.UtcNow;
            f_LastCommandTimeSpan = (stop - start);
        }