TunnelService.kt:
- İşlev stopRunner(), VPN hizmetini durdurmaktan soruml
- Uygulama, VPN bağlantısının kesilmesini istediğinde çağrılır.
- Ayrıca, VPN bağlantısı başlatılamadığında da çağrılır.
AppModel.dart:
- İşlev togglePowerButton(), VPN bağlantısını değiştirmekten sorumludur.
- Mevcut VPN durumunu kontrol ediyor ve bağlanıp bağlanmamaya karar veriyor
class TunnelService : VpnService() {
override fun onRevoke() {
stopRunner(true) // Revoke the VPN connection and restart the service if needed
}
private fun stopRunner(restart: Boolean = false, msg: String? = null) {
if (data.state == VpnState.State.Stopping) return
data.changeState(VpnState.State.Stopping)
GlobalScope.launch(Dispatchers.Main.immediate) {
data.connectingJob?.cancelAndJoin() // Ensure stop connecting first
coroutineScope {
killProcesses(this)
}
data.changeState(VpnState.State.Stopped, msg)
if (restart) startRunner() else {
stopSelf()
}
}
}
private fun killProcesses(scope: CoroutineScope) {
data.proxy?.run {
shutdown(scope)
data.proxy = null
}
data.localDns?.shutdown(scope)
data.localDns = null
active = false
scope.launch { DefaultNetworkListener.stop(this) }
pfd?.close()
pfd = null
}
}class AppModel extends BaseModel {
void togglePowerButton() async {
if (vpnStatus == VpnStatus.connecting) {
Fluttertoast.showToast(
msg: "Bağlanıyor, lütfen bekleyin...",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 2,
textColor: Colors.white,
fontSize: 14.0,
);
return;
}
if (vpnStatus == VpnStatus.disconnecting) {
Fluttertoast.showToast(
msg: "Bağlantı kesiliyor, lütfen bekleyin...",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 2,
textColor: Colors.white,
fontSize: 14.0,
);
return;
}
if (vpnStatus == VpnStatus.connected) {
vpnStatus = VpnStatus.disconnecting;
} else if (vpnStatus == VpnStatus.disconnected) {
vpnStatus = VpnStatus.connecting;
}
await vpnManager.toggle();
notifyListeners();
}
}kodunuzda ufak bir güncelleme yaptim gerektigi gibi degiştirin istediginiz sonucu alabilirsiniz