新增:主动控制·客户端 -> 一键换新机 支持导出导入Frpc配置

This commit is contained in:
pppscn 2022-06-21 19:11:18 +08:00
parent 0579a5815b
commit 16fa5ffa62
8 changed files with 42 additions and 9 deletions

View File

@ -58,6 +58,7 @@ server_port = 8888
#可选建议启用
token = 888888888
#[二选一即可]每台机器不可重复通过 http://88.88.88.88:5000 访问
[SmsForwarder-TCP]
type = tcp
local_ip = 127.0.0.1
@ -65,6 +66,7 @@ local_port = 5000
#只要修改下面这一行
remote_port = 5000
#[二选一即可]每台机器不可重复通过 http://smsf.demo.com 访问
[SmsForwarder-HTTP]
type = http
local_ip = 127.0.0.1
@ -177,6 +179,7 @@ server_port = 8888
#可选建议启用
token = 888888888
#[二选一即可]每台机器不可重复通过 http://88.88.88.88:5000 访问
[SmsForwarder-TCP]
type = tcp
local_ip = 127.0.0.1
@ -184,6 +187,7 @@ local_port = 5000
#只要修改下面这一行
remote_port = 5000
#[二选一即可]每台机器不可重复通过 http://smsf.demo.com 访问
[SmsForwarder-HTTP]
type = http
local_ip = 127.0.0.1

View File

@ -30,4 +30,10 @@ interface FrpcDao {
@Query("SELECT * FROM Frpc ORDER BY time DESC")
fun pagingSource(): PagingSource<Int, Frpc>
//TODO:允许主线程访问,后面再优化
@Query("SELECT * FROM Frpc ORDER BY time ASC")
fun getAll(): List<Frpc>
@Query("DELETE FROM Frpc")
fun deleteAll()
}

View File

@ -43,10 +43,10 @@ interface RuleDao {
fun pagingSource(type: String): PagingSource<Int, RuleAndSender>
@Transaction
@Query("SELECT * FROM rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)")
@Query("SELECT * FROM Rule where type=:type and status=:status and (sim_slot='ALL' or sim_slot=:simSlot)")
suspend fun getRuleAndSender(type: String, status: Int, simSlot: String): List<RuleAndSender>
//TODO:允许主线程访问,后面再优化
@Query("SELECT * FROM rule ORDER BY id ASC")
@Query("SELECT * FROM Rule ORDER BY id ASC")
fun getAll(): List<Rule>
}

View File

@ -31,14 +31,14 @@ interface SenderDao {
@Query("SELECT * FROM Sender where status=:status ORDER BY id DESC")
fun pagingSource(status: Int): PagingSource<Int, Sender>
@Query("SELECT * FROM sender ORDER BY id DESC")
@Query("SELECT * FROM Sender ORDER BY id DESC")
fun getAll(): Single<List<Sender>>
@Query("SELECT COUNT(id) FROM sender WHERE status = 1")
@Query("SELECT COUNT(id) FROM Sender WHERE status = 1")
fun getOnCount(): Flow<Long>
//TODO:允许主线程访问,后面再优化
@Query("SELECT * FROM sender ORDER BY id ASC")
@Query("SELECT * FROM Sender ORDER BY id ASC")
fun getAll2(): List<Sender>
@Query("DELETE FROM Sender")

View File

@ -26,4 +26,11 @@ class FrpcRepository(
@WorkerThread
fun update(frpc: Frpc) = frpcDao.update(frpc)
//TODO:允许主线程访问,后面再优化
val all: List<Frpc> = frpcDao.getAll()
fun deleteAll() {
frpcDao.deleteAll()
}
}

View File

@ -26,6 +26,7 @@ class SenderRepository(private val senderDao: SenderDao) {
//TODO:允许主线程访问,后面再优化
val all: List<Sender> = senderDao.getAll2()
fun deleteAll() {
senderDao.deleteAll()
}

View File

@ -1,6 +1,7 @@
package com.idormy.sms.forwarder.entity
import com.google.gson.annotations.SerializedName
import com.idormy.sms.forwarder.database.entity.Frpc
import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.database.entity.Sender
import java.io.Serializable
@ -76,4 +77,6 @@ data class CloneInfo(
var senderList: List<Sender>? = null,
@SerializedName("rule_list")
var ruleList: List<Rule>? = null,
@SerializedName("frpc_list")
var frpcList: List<Frpc>? = null,
) : Serializable

View File

@ -186,6 +186,7 @@ class HttpServerUtils private constructor() {
cloneInfo.enablePureClientMode = SettingUtils.enablePureClientMode
cloneInfo.senderList = Core.sender.all
cloneInfo.ruleList = Core.rule.all
cloneInfo.frpcList = Core.frpc.all
return cloneInfo
}
@ -228,12 +229,23 @@ class HttpServerUtils private constructor() {
//删除发送通道、转发规则、转发日志
Core.sender.deleteAll()
//发送通道
for (sender in cloneInfo.senderList!!) {
Core.sender.insert(sender)
if (!cloneInfo.senderList.isNullOrEmpty()) {
for (sender in cloneInfo.senderList!!) {
Core.sender.insert(sender)
}
}
//转发规则
for (rule in cloneInfo.ruleList!!) {
Core.rule.insert(rule)
if (!cloneInfo.ruleList.isNullOrEmpty()) {
for (rule in cloneInfo.ruleList!!) {
Core.rule.insert(rule)
}
}
//Frpc配置
Core.frpc.deleteAll()
if (!cloneInfo.frpcList.isNullOrEmpty()) {
for (frpc in cloneInfo.frpcList!!) {
Core.frpc.insert(frpc)
}
}
true
} catch (e: Exception) {