owenclave / app/src/main/java/io/nekohasekai/sagernet/bg/AbstractInstance.kt

github - dev - back to tree - upstream
/****************************************************************************** * * * Copyright (C) 2021 by nekohasekai * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ******************************************************************************/ package io.nekohasekai.sagernet.bg import java.io.Closeable interface AbstractInstance : Closeable { fun launch() /** * Suspends until the instance is actually ready to serve traffic. * * External proxy engines (e.g. olcrtc) launch as separate processes and * need time to establish their transport (WebRTC ICE/negotiation) before * their local SOCKS listener accepts connections. Until then the tunnel * would report "connected" while every request fails as "unavailable". * Implementations should block the connecting phase here so the UI stays * in the Connecting state until the engine can really pass traffic. * * Default is a no-op for engines that are ready as soon as launched. */ suspend fun awaitReady() {} }