main
 1using System;
 2using System.Collections.Generic;
 3using System.Net;
 4using Autofac.Builder;
 5using common;
 6using Rhino.Queues;
 7
 8namespace server
 9{
10    class Server
11    {
12        static void Main()
13        {
14            try
15            {
16                AppDomain.CurrentDomain.UnhandledException += (o, e) =>
17                {
18                    (e.ExceptionObject as Exception).add_to_log();
19                };
20                AppDomain.CurrentDomain.ProcessExit += (o, e) =>
21                {
22                    "shutting down".log();
23                    try
24                    {
25                        Resolve.the<CommandProcessor>().stop();
26                        Resolve.the<IQueueManager>().Dispose();
27                    }
28                    catch {}
29                    Environment.Exit(Environment.ExitCode);
30                };
31                run();
32                Console.ReadLine();
33            }
34            catch (Exception e)
35            {
36                e.add_to_log();
37                Console.Out.WriteLine(e);
38                Console.ReadLine();
39            }
40        }
41
42        static void run()
43        {
44            var builder = new ContainerBuilder();
45            var registry = new AutofacDependencyRegistryBuilder(builder).build();
46            Resolve.initialize_with(registry);
47
48            builder.Register(x => registry).As<DependencyRegistry>().SingletonScoped();
49            builder.Register<StartServiceBus>().As<NeedStartup>();
50
51            var manager = new QueueManager(new IPEndPoint(IPAddress.Loopback, 2200), "server.esent");
52            manager.CreateQueues("server");
53            builder.Register(x => new RhinoPublisher("client", 2201, manager)).As<ServiceBus>().SingletonScoped();
54            builder.Register(x => new RhinoReceiver(manager.GetQueue("server"), x.Resolve<CommandProcessor>())).As<RhinoReceiver>().As<Receiver>().SingletonScoped();
55
56            //builder.Register<AsynchronousCommandProcessor>().As<CommandProcessor>().SingletonScoped();
57            builder.Register<SynchronousCommandProcessor>().As<CommandProcessor>().SingletonScoped();
58            builder.Register<RequestHandler>().As<Handler>();
59
60            Resolve.the<IEnumerable<NeedStartup>>().each(x => x.run());
61            Resolve.the<CommandProcessor>().run();
62        }
63    }
64}