start method

Future<void> start()

Implementation

Future<void> start() async {
  try {
    if(_port is int){
    }else if(_port is String){
      final portList = (_port as String).split('-').map((e) => int.tryParse(e.trim())).whereType<int>().toList();
      if(portList.length != 2){
        throw ArgumentError('Port must be an int or a String[e.g. 8001-8003]');
      }
      final leastPort = min(portList[0], portList[1]);
      final maxPort = max(portList[0], portList[1]);
      for(int tmpPort= leastPort; tmpPort <= maxPort; tmpPort++){
        if(!await Utils.isPortInUse(tmpPort, address: _host)){
          _port = tmpPort;
          break;
        }
      }
    }else{
      throw ArgumentError('Port must be an int or a String[e.g. 8001-8003]');
    }
    _server = await ServerSocket.bind(_host, _port as int);
    _isRunning = true;
    _logger.i('代理服务端已启动:$_host:$_port');
  } catch (e) {
    _logger.e('服务端启动失败', error: e);
    rethrow;
  }

  _server.listen(
    (clientSocket){
      _logger.i('接收到新连接:${clientSocket.remoteAddress}:${clientSocket.remotePort}');
      _handleClient(clientSocket); // 处理单个客户端请求
    },
    onError: (error){
      _logger.e('本地服务端数据处理异常',error: error);
    },
    onDone: () => stop(),
  );
}