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}