private void CreateAndStartServers()
        {
            RealTimeServer          = new RealTimeDataServer(Settings.Default.RealTimeDataServerRequestPort, RealTimeBroker);
            DataServer              = new HistoricalDataServer(Settings.Default.HistoricalServerPort, HistoricalBroker);
            MessagesServer          = new MessagesServer(Settings.Default.MessagesServerPushPort);
            EquityUpdateServer      = new EquityUpdateServer(Settings.Default.EquityUpdateServerRouterPort);
            InstrumentRequestServer = new RequestResponseServer(Settings.Default.InstrumetnUpdateRequestSocketPort);

            RealTimeServer.StartServer();
            DataServer.StartServer();
            MessagesServer.StartServer();
            InstrumentRequestServer.StartServer();
            //not using poller.Async, need to spawn thread
            Task.Factory.StartNew(EquityUpdateServer.StartServer, TaskCreationOptions.LongRunning);
        }
        /// <summary>
        /// Starts the server.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <returns><c>true</c> if Server is successfully started, <c>false</c> otherwise.</returns>
        /// <exception cref="System.ArgumentNullException">server</exception>
        /// <exception cref="System.ArgumentOutOfRangeException"></exception>
        public bool StartServer(MqServer server)
        {
            if (server == null)
            {
                throw new ArgumentNullException(nameof(server));
            }

            INetMQServer netMqServer;

            switch (server.ServerType)
            {
            case ServerType.EquityUpdate:
                netMqServer = new EquityUpdateServer(server);
                netMqServer.StartServer();
                break;

            case ServerType.HistoricalData:
                netMqServer = new HistoricalDataServer(server, null);
                netMqServer.StartServer();
                break;

            case ServerType.InstrumentRequest:
                netMqServer = new RequestResponseServer(server);
                netMqServer.StartServer();
                break;

            case ServerType.Message:
                netMqServer = new MessagesServer(server);
                netMqServer.StartServer();
                break;

            case ServerType.RealTimeData:
                netMqServer = new EquityUpdateServer(server);
                netMqServer.StartServer();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(netMqServer.ServerRunning);
        }