コード例 #1
0
ファイル: Robot.cs プロジェクト: tonycompton/mmbot
 protected Robot(LoggerConfigurator logConfig)
 {
     LogConfig = logConfig;
     Logger    = logConfig == null
         ? new TraceLogger(false, "trace", LogLevel.Error, true, false, false, "F")
         : logConfig.GetLogger();
     AutoLoadScripts = true;
 }
コード例 #2
0
ファイル: Robot.cs プロジェクト: tonycompton/mmbot
 public Robot(string name, IDictionary <string, string> config, LoggerConfigurator logConfig, IDictionary <string, IAdapter> adapters, IRouter router, IBrain brain, IScriptStore scriptStore, IScriptRunner scriptRunner)
     : this(logConfig)
 {
     _name         = name;
     _config       = config;
     _scriptStore  = scriptStore;
     _adapters     = adapters;
     _brain        = brain;
     _router       = router;
     _scriptRunner = scriptRunner;
     _isConfigured = true;
     Initialize(adapters.Values.ToArray().Concat(new object[] { router, brain, scriptRunner }).ToArray());
 }
コード例 #3
0
 public NuGetPackageAssemblyResolver(LoggerConfigurator logConfig)
 {
     _log = logConfig.GetLogger();
     AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
     RefreshAssemblies(_log);
 }
コード例 #4
0
ファイル: Initializer.cs プロジェクト: jvanzella/mmbot
        public static LoggerConfigurator CreateLogConfig(Options options)
        {
            var logConfig = new LoggerConfigurator(options.Verbose ? LogLevel.Debug : LogLevel.Info);
            if (Environment.UserInteractive)
            {
                logConfig.ConfigureForConsole();
            }
            else
            {
                logConfig.AddTraceListener();
            }

            var logger = logConfig.GetLogger();

            if (!string.IsNullOrWhiteSpace(options.LogFile))
            {
                if (Directory.Exists(Path.GetDirectoryName(options.LogFile)))
                    logConfig.ConfigureForFile(options.LogFile);
                else
                    logger.Warn(string.Format("Failed to load log file.  Path for {0} does not exist.", options.LogFile));
            }
            return logConfig;
        }
コード例 #5
0
ファイル: LoggerConfigurator.cs プロジェクト: nardin/mmbot
 public static Common.Logging.ILog GetConsoleLogger(LogLevel logLevel)
 {
     var configurator = new LoggerConfigurator(logLevel);
     configurator.ConfigureForConsole();
     return configurator.GetLogger();
 }
コード例 #6
0
ファイル: RobotTests.cs プロジェクト: dcr25568/mmbot
        public async Task XmppRobot()
        {
            //enter config values to enable this test
            var config = new Dictionary<string, string>();         
            //config.Add("MMBOT_XMPP_HOST", "userver");
            //config.Add("MMBOT_XMPP_CONNECT_HOST", "userver");
            //config.Add("MMBOT_XMPP_USERNAME", "mmbot");
            //config.Add("MMBOT_XMPP_PASSWORD", "password");
            //config.Add("MMBOT_XMPP_CONFERENCE_SERVER", "conference.userver");
            //config.Add("MMBOT_XMPP_ROOMS", "testroom");
            //config.Add("MMBOT_XMPP_LOGROOMS", "logroom");

            if (config.Count() == 0)
                return;

            var logConfig = new LoggerConfigurator(LogLevel.Trace);
            logConfig.AddTraceListener();

            var robot = new RobotBuilder(logConfig)
                        .WithConfiguration(config)
                        .UseAdapter<XmppAdapter>()
                        .Build(); 
            
            robot.AutoLoadScripts = false;
            robot.LoadScript<CompiledScripts.Ping>();

            bool robotReady = false;
            robot.On<bool>("RobotReady", result =>
            {
                robotReady = result;
            });

            await robot.Run();

            Assert.True(robotReady);

            int cmdReceived = 0;
            robot.Hear("mmbot", msg => { cmdReceived++; });

            //will wait for two commands
            while (cmdReceived < 2)
                Thread.Sleep(1000);            
        }
コード例 #7
0
ファイル: RobotTests.cs プロジェクト: dcr25568/mmbot
        public async Task WhenMultipleAdaptersAreConfigured_ResponsesAreOnlySentToTheOriginatingAdapter()
        {
            var logConfig = new LoggerConfigurator(LogLevel.Trace);
            logConfig.ConfigureForConsole();
            using(var robot = new RobotBuilder(logConfig)
                        .DisablePluginDiscovery()
                        .DisableScriptDiscovery()
                        .UseAdapter<StubAdapter>()
                        .UseAdapter<StubAdapter2>()
                        .UseBrain<StubBrain>()
                        .Build()){
            
                robot.AutoLoadScripts = false;

                var adapter1 = robot.Adapters.Values.OfType<StubAdapter>().First();
                var adapter2 = robot.Adapters.Values.OfType<StubAdapter2>().First();

                robot.LoadScript<StubEchoScript>();

                var expectedMessages = new[]
                {
                    Tuple.Create("test1", "Hello Test 1"),
                    Tuple.Create("test2", "Hello Test 2"),
                    Tuple.Create("test3", "Hello Test 3")
                };
                await robot.Run();

                Console.WriteLine("Testing Adapter 1");
                expectedMessages.ForEach(t => adapter1.SimulateMessage(t.Item1, "mmbot " + t.Item2));

                var expectedMessagesValues = expectedMessages.Select(t => string.Concat(t.Item1, t.Item2));
                Console.WriteLine("Expected:");
                Console.WriteLine(string.Join(Environment.NewLine, expectedMessagesValues));
                var actualMessagesValues = adapter1.Messages.Select(t => string.Concat(t.Item1.User.Name, t.Item2.FirstOrDefault()));
                Console.WriteLine("Actual:");
                Console.WriteLine(string.Join(Environment.NewLine, actualMessagesValues));

                Assert.True(expectedMessagesValues.SequenceEqual(actualMessagesValues));
                Assert.Equal(0, adapter2.Messages.Count());

                Console.WriteLine("Testing Adapter 2");
                expectedMessages.ForEach(t => adapter2.SimulateMessage(t.Item1, "mmbot " + t.Item2));

            
                Console.WriteLine("Expected:");
                Console.WriteLine(string.Join(Environment.NewLine, expectedMessagesValues));
                actualMessagesValues = adapter2.Messages.Select(t => string.Concat(t.Item1.User.Name, t.Item2.FirstOrDefault()));
                Console.WriteLine("Actual:");
                Console.WriteLine(string.Join(Environment.NewLine, actualMessagesValues));

                Assert.True(expectedMessagesValues.SequenceEqual(actualMessagesValues));
                Assert.Equal(3, adapter1.Messages.Count());
            };
        }
コード例 #8
0
ファイル: RobotTests.cs プロジェクト: dcr25568/mmbot
        public async Task WhenRobotIsReset_ScriptCleanupIsInvoked()
        {
            var loggerConfigurator = new LoggerConfigurator(LogLevel.All);
            var builder = new RobotBuilder(loggerConfigurator)
                .UseAdapter<StubAdapter>()
                .UseBrain<StubBrain>()
                .DisablePluginDiscovery()
                .DisableScriptDiscovery();

            var scriptRunner = new ScriptRunner(loggerConfigurator.GetLogger());
            
            var robot = builder
                        .Build(c => c.Register<IScriptRunner>(scriptRunner));

            scriptRunner.Initialize(robot);

            robot.LoadScript<StubEchoScript>();

            bool isCleanedUp = false;
            using(scriptRunner.StartScriptProcessingSession(new ScriptSource("TestScript", string.Empty)))
            {
                robot.RegisterCleanup(() => isCleanedUp = true);
            }

            await robot.Reset();

            Assert.True(isCleanedUp);
        }
コード例 #9
0
 public RobotBuilder(LoggerConfigurator logConfig) : this()
 {
     _logConfig = logConfig;
 }