static void Main(string[] args)
        {
            Logger Log = LogManager.GetLogger("ConsoleHost");


            Log.Info("Starting ISIS");
            var coordinator = new IsisNodeCoordinator();

            IPEndPoint externalEndpoint = null;
            IPEndPoint internalEndpoint = null;

            try
            {
                if (args.Length == 2)
                {
                    string[] addrPort = args[0].Split(':');
                    externalEndpoint = new IPEndPoint(IPAddress.Parse(addrPort[0]), int.Parse(addrPort[1]));
                    addrPort         = args[1].Split(':');
                    internalEndpoint = new IPEndPoint(IPAddress.Parse(addrPort[0]), int.Parse(addrPort[1]));
                }
                else
                {
                    externalEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5055);
                    internalEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5056);
                }
            }
            catch (Exception)
            {
                Log.Error("incorrect cmd params - expected:  externalIp:port internalIp:port");
            }

            var builder = new ContainerBuilder();

            //register core messages
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(EmptyMessage)))
            .Where(x => x.IsAssignableTo <Message>() && x != typeof(Message))
            .As <Message>();

            //register domain messages
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(IChatLogin)))
            .Where(x => x.IsAssignableTo <Message>() && x != typeof(Message))
            .As <Message>();

            //register domain service definitions and proxies
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(IChatLogin)))
            .Where(x => x.IsAssignableTo <NetProxy>() && x != typeof(NetProxy))
            .As <NetProxy>();

            //register domain service implementations
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(UserManager)))
            .Where(x => x.IsAssignableTo <Actor>() && x != typeof(Actor))
            .As <Actor>();

            builder.RegisterType <OperationDispatcher>().As <IOperationDispatcher>().SingleInstance();
            builder.RegisterType <ActorRepository>().As <IActorRepository>().SingleInstance();
            builder.RegisterType <MessageFactory>().As <IMessageFactory>().SingleInstance();

            var externalNetConf = new NetPeerConfiguration("ChatApp")
            {
                ConnectionTimeout = 30,
                Port         = externalEndpoint.Port,
                LocalAddress = externalEndpoint.Address
            };
            var internalNetConf = new NetPeerConfiguration("ChatApp")
            {
                ConnectionTimeout = 30,
                Port         = internalEndpoint.Port,
                LocalAddress = internalEndpoint.Address
            };

            builder.Register(c => new ServerNode(
                                 new LidgrenNetProvider(externalNetConf),
                                 new LidgrenNetProvider(internalNetConf),
                                 coordinator,
                                 c.Resolve <IMessageFactory>(), c.Resolve <IOperationDispatcher>(), c.Resolve <IActorRepository>(), () => new ChatClient()))
            .As <IServerNode>().SingleInstance();

            var container = builder.Build();

            var node = container.Resolve <IServerNode>();

            node.Start();

            IsisSystem.WaitForever();
        }
        static void Main(string[] args)
        {
            Logger Log = LogManager.GetLogger("ConsoleHost");

            Log.Info("Starting ISIS");
            var coordinator = new IsisNodeCoordinator();

            IPEndPoint externalEndpoint = null;
            IPEndPoint internalEndpoint = null;

            try
            {
                if (args.Length == 2)
                {
                    string[] addrPort = args[0].Split(':');
                    externalEndpoint = new IPEndPoint(IPAddress.Parse(addrPort[0]), int.Parse(addrPort[1]));
                    addrPort = args[1].Split(':');
                    internalEndpoint = new IPEndPoint(IPAddress.Parse(addrPort[0]), int.Parse(addrPort[1]));
                }
                else
                {
                    externalEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5055);
                    internalEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5056);
                }
            }
            catch (Exception)
            {
                Log.Error("incorrect cmd params - expected:  externalIp:port internalIp:port");
            }

            var builder = new ContainerBuilder();

            //register core messages
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(EmptyMessage)))
                .Where(x => x.IsAssignableTo<Message>() && x != typeof(Message))
                .As<Message>();

            //register domain messages
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(IChatLogin)))
                .Where(x => x.IsAssignableTo<Message>() && x != typeof(Message))
                .As<Message>();

            //register domain service definitions and proxies
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(IChatLogin)))
                .Where(x => x.IsAssignableTo<NetProxy>() && x != typeof(NetProxy))
                .As<NetProxy>();

            //register domain service implementations
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(UserManager)))
                .Where(x => x.IsAssignableTo<Actor>() && x != typeof(Actor))
                .As<Actor>();

            builder.RegisterType<OperationDispatcher>().As<IOperationDispatcher>().SingleInstance();
            builder.RegisterType<ActorRepository>().As<IActorRepository>().SingleInstance();
            builder.RegisterType<MessageFactory>().As<IMessageFactory>().SingleInstance();

            var externalNetConf = new NetPeerConfiguration("ChatApp")
                {
                    ConnectionTimeout = 30,
                    Port = externalEndpoint.Port,
                    LocalAddress = externalEndpoint.Address
                };
            var internalNetConf = new NetPeerConfiguration("ChatApp")
            {
                ConnectionTimeout = 30,
                Port = internalEndpoint.Port,
                LocalAddress = internalEndpoint.Address
            };

            builder.Register(c => new ServerNode(
                    new LidgrenNetProvider(externalNetConf),
                    new LidgrenNetProvider(internalNetConf),
                    coordinator,
                    c.Resolve<IMessageFactory>(), c.Resolve<IOperationDispatcher>(), c.Resolve<IActorRepository>(), () => new ChatClient()))
                .As<IServerNode>().SingleInstance();

            var container = builder.Build();

            var node = container.Resolve<IServerNode>();
            node.Start();

            IsisSystem.WaitForever();
        }