private static bool IsConnectedToSameServer(TcpClient currentClient, Server newServer)
 {
     try
     {
         if (currentClient != null && currentClient.Connected)
         {
             var newServerEndPoint = newServer.Ip + ":" + newServer.Port;
             if (newServerEndPoint  == currentClient.Client.RemoteEndPoint.ToString())
             {
                 return true;
             }
         }
         return false;
     }
     catch (Exception ex) { Cat.lastException = ex; return false; }
 }
        private static TcpClient CreateChannel(Server server)
        {
            if (!server.Enabled)
            {
                return null;
            }

            TcpClient socket = new TcpClient();

            socket.NoDelay = true;
            socket.ReceiveTimeout = 2*1000; // 2 seconds

            string ip = server.Ip;
            int port = server.Port;

            // Logger.Info("Connecting to server({0}:{1}) ...", ip, port);

            try
            {
                socket.Connect(ip, port);

                if (socket.Connected)
                {
                    // Logger.Info("Connected to server({0}:{1}).", ip, port);

                    return socket;
                }
                Logger.Error("Failed to connect to server({0}:{1}).", ip, port);
            }
            catch (Exception e)
            {
                Logger.Error(
                    "Failed to connect to server({0}:{1}). Error: {2}.",
                    ip,
                    port,
                    e.Message
                    );
                Cat.lastException = e;
                if (null != socket)
                {
                    try { socket.Close(); }
                    catch (Exception ex) { Cat.lastException = ex; };
                }
            }

            return null;
        }
        private static IEnumerable<Server> BuildServers(XmlNodeList nodes)
        {
            List<Server> servers = new List<Server>();

            if (nodes != null && nodes.Count > 0)
            {
                XmlElement first = (XmlElement)nodes[0];
                XmlNodeList serverNodes = first.GetElementsByTagName("server");

                foreach (XmlNode node in serverNodes)
                {
                    XmlElement serverNode = (XmlElement)node;
                    string ip = GetStringProperty(serverNode, "ip", "localhost");
                    int port = GetIntProperty(serverNode, "port", 2280);
                    int httpPort = GetIntProperty(serverNode, "http-port", 8080);
                    Server server = new Server(ip, port, httpPort) { Enabled = GetBooleanProperty(serverNode, "enabled", true) };

                    servers.Add(server);
                }
            }

            if (servers.Count == 0)
            {
                Logger.Warn("No server configured, use localhost:2280 instead.");
                servers.Add(new Server("localhost", 2280));
            }

            return servers;
        }