public static void main(String[] args) throws IOException {
    if (args.length == 0) {
      System.out.println("Usage:");
      System.out.println("   {sourceHost}@{sourcePort} {destinationHost}@{destinationPort}");

      System.exit(0);
    }

    PyroSelector listenHub = new PyroSelector();
    PyroSelector trafficHub = new PyroSelector();

    GatewayTwoSelectors gateway = new GatewayTwoSelectors(listenHub, trafficHub);

    for (int i = 0; i < args.length; i += 2) {
      String srcArg = args[i + 0];
      String dstArg = args[i + 1];

      String srcHost = Text.before(srcArg, '@');
      String dstHost = Text.before(dstArg, '@');
      int srcPort = Integer.parseInt(Text.after(srcArg, '@'));
      int dstPort = Integer.parseInt(Text.after(dstArg, '@'));
      InetSocketAddress src = new InetSocketAddress(srcHost, srcPort);
      InetSocketAddress dst = new InetSocketAddress(dstHost, dstPort);

      gateway.addBridge(src, dst);
    }

    listenHub.spawnNetworkThread("listen");
    trafficHub.spawnNetworkThread("traffic");
  }