parent
							
								
									ea314be257
								
							
						
					
					
						commit
						7f1f8ba3e7
					
				@ -1,42 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>wusthelper-backend</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <packaging>pom</packaging> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,42 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>backend-main</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <packaging>pom</packaging> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,41 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>web</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,20 +0,0 @@ | 
				
			||||
package cn.wustlinghang.internal.api.v1; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.internal.api.v1.response.FrpPluginResponse; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/internal/frp") | 
				
			||||
public class FrpPluginHandler { | 
				
			||||
    @RequestMapping("/handler") | 
				
			||||
    public FrpPluginResponse handle(String request) { | 
				
			||||
        log.info(request); | 
				
			||||
        return FrpPluginResponse.builder() | 
				
			||||
                .reject(false) | 
				
			||||
                .unchange(true) | 
				
			||||
                .build(); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,14 +0,0 @@ | 
				
			||||
package cn.wustlinghang.internal.api.v1.response; | 
				
			||||
 | 
				
			||||
import lombok.Builder; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
@Builder | 
				
			||||
public class FrpPluginResponse { | 
				
			||||
    private boolean reject; | 
				
			||||
 | 
				
			||||
    private boolean unchange; | 
				
			||||
 | 
				
			||||
//    private String rejectReason;
 | 
				
			||||
} | 
				
			||||
@ -1,13 +1,23 @@ | 
				
			||||
package cn.wustlinghang.main.web.api.v2.undergrade; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.main.web.service.campus.undergrad.UndergradCookieService; | 
				
			||||
import cn.wustlinghang.wusthelper.main.response.Response; | 
				
			||||
import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
import org.springframework.web.bind.annotation.RestController; | 
				
			||||
 | 
				
			||||
@RestController | 
				
			||||
@RequestMapping("/jwc") | 
				
			||||
public class UndergradController { | 
				
			||||
    private final UndergradCookieService undergradCookieService; | 
				
			||||
 | 
				
			||||
    public UndergradController(UndergradCookieService undergradCookieService) { | 
				
			||||
        this.undergradCookieService = undergradCookieService; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostMapping("/login") | 
				
			||||
    public Response<String> login() { | 
				
			||||
        return Response.success(""); | 
				
			||||
        String cookie = undergradCookieService.getLoginCookie("202118194039", "-96387ee"); | 
				
			||||
        return Response.success(cookie); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,41 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>common</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,42 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>external-library</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <packaging>pom</packaging> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,12 +1,16 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.rpc.config; | 
				
			||||
 | 
				
			||||
import lombok.Builder; | 
				
			||||
import lombok.Data; | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
@Builder | 
				
			||||
public class RegisterConfig { | 
				
			||||
    private String localServicePort; | 
				
			||||
 | 
				
			||||
    private String serviceName; | 
				
			||||
 | 
				
			||||
    private String consulAddress; | 
				
			||||
 | 
				
			||||
    private String token; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -1,60 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>sub-services</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <packaging>pom</packaging> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-core</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-network-okhttp</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
      <artifactId>common</artifactId> | 
				
			||||
      <version>0.0.1-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
</project> | 
				
			||||
@ -1,93 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>graduate</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive-jackson</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-hibernate-validator</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-arc</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-core</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-network-okhttp</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
      <artifactId>common</artifactId> | 
				
			||||
      <version>0.0.1-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
  <build> | 
				
			||||
    <plugins> | 
				
			||||
      <plugin> | 
				
			||||
        <groupId>io.quarkus.platform</groupId> | 
				
			||||
        <artifactId>quarkus-maven-plugin</artifactId> | 
				
			||||
        <version>3.1.3.Final</version> | 
				
			||||
        <extensions>true</extensions> | 
				
			||||
      </plugin> | 
				
			||||
    </plugins> | 
				
			||||
  </build> | 
				
			||||
</project> | 
				
			||||
@ -1,93 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>library</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive-jackson</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-hibernate-validator</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-arc</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-core</artifactId> | 
				
			||||
      <version>0.0.2-beta</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-network-okhttp</artifactId> | 
				
			||||
      <version>0.0.2-beta</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
      <artifactId>common</artifactId> | 
				
			||||
      <version>0.0.1-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
  <build> | 
				
			||||
    <plugins> | 
				
			||||
      <plugin> | 
				
			||||
        <groupId>io.quarkus.platform</groupId> | 
				
			||||
        <artifactId>quarkus-maven-plugin</artifactId> | 
				
			||||
        <version>3.1.3.Final</version> | 
				
			||||
        <extensions>true</extensions> | 
				
			||||
      </plugin> | 
				
			||||
    </plugins> | 
				
			||||
  </build> | 
				
			||||
</project> | 
				
			||||
@ -1,93 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>physics</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive-jackson</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-hibernate-validator</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-arc</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-core</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-network-okhttp</artifactId> | 
				
			||||
      <version>0.0.2-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
      <artifactId>common</artifactId> | 
				
			||||
      <version>0.0.1-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
  <build> | 
				
			||||
    <plugins> | 
				
			||||
      <plugin> | 
				
			||||
        <groupId>io.quarkus.platform</groupId> | 
				
			||||
        <artifactId>quarkus-maven-plugin</artifactId> | 
				
			||||
        <version>3.1.3.Final</version> | 
				
			||||
        <extensions>true</extensions> | 
				
			||||
      </plugin> | 
				
			||||
    </plugins> | 
				
			||||
  </build> | 
				
			||||
</project> | 
				
			||||
@ -1,99 +0,0 @@ | 
				
			||||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | 
				
			||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | 
				
			||||
  <modelVersion>4.0.0</modelVersion> | 
				
			||||
  <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
  <artifactId>undergrad</artifactId> | 
				
			||||
  <version>0.0.1-SNAPSHOT</version> | 
				
			||||
  <dependencies> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive-jackson</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-hibernate-validator</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-resteasy-reactive</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>io.quarkus</groupId> | 
				
			||||
      <artifactId>quarkus-arc</artifactId> | 
				
			||||
      <version>3.1.3.Final</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.ini4j</groupId> | 
				
			||||
      <artifactId>ini4j</artifactId> | 
				
			||||
      <version>0.5.4</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-core</artifactId> | 
				
			||||
      <version>0.0.2-beta</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.mywust</groupId> | 
				
			||||
      <artifactId>mywust-network-okhttp</artifactId> | 
				
			||||
      <version>0.0.2-beta</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>cn.wustlinghang.wusthelper</groupId> | 
				
			||||
      <artifactId>common</artifactId> | 
				
			||||
      <version>0.0.1-SNAPSHOT</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>jakarta.annotation</groupId> | 
				
			||||
      <artifactId>jakarta.annotation-api</artifactId> | 
				
			||||
      <version>2.1.1</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>javax.annotation</groupId> | 
				
			||||
      <artifactId>javax.annotation-api</artifactId> | 
				
			||||
      <version>1.3.2</version> | 
				
			||||
      <scope>compile</scope> | 
				
			||||
    </dependency> | 
				
			||||
    <dependency> | 
				
			||||
      <groupId>org.projectlombok</groupId> | 
				
			||||
      <artifactId>lombok</artifactId> | 
				
			||||
      <version>1.18.26</version> | 
				
			||||
      <scope>provided</scope> | 
				
			||||
    </dependency> | 
				
			||||
  </dependencies> | 
				
			||||
  <repositories> | 
				
			||||
    <repository> | 
				
			||||
      <id>central</id> | 
				
			||||
      <url>https://repo1.maven.org/maven2</url> | 
				
			||||
    </repository> | 
				
			||||
    <repository> | 
				
			||||
      <snapshots> | 
				
			||||
        <enabled>true</enabled> | 
				
			||||
      </snapshots> | 
				
			||||
      <id>github</id> | 
				
			||||
      <url>https://maven.pkg.github.com/LingHangStudio/mywust</url> | 
				
			||||
    </repository> | 
				
			||||
  </repositories> | 
				
			||||
  <build> | 
				
			||||
    <plugins> | 
				
			||||
      <plugin> | 
				
			||||
        <groupId>io.quarkus.platform</groupId> | 
				
			||||
        <artifactId>quarkus-maven-plugin</artifactId> | 
				
			||||
        <version>3.1.3.Final</version> | 
				
			||||
        <extensions>true</extensions> | 
				
			||||
      </plugin> | 
				
			||||
    </plugins> | 
				
			||||
  </build> | 
				
			||||
</project> | 
				
			||||
@ -1,107 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc; | 
				
			||||
 | 
				
			||||
import cn.hutool.core.thread.ThreadUtil; | 
				
			||||
import cn.hutool.core.util.RandomUtil; | 
				
			||||
import cn.wustlinghang.mywust.network.Requester; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.client.ConsulClient; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.client.FrpcClient; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.config.RpcConfig; | 
				
			||||
import com.fasterxml.jackson.databind.JsonNode; | 
				
			||||
import com.fasterxml.jackson.databind.ObjectMapper; | 
				
			||||
import io.quarkus.runtime.Startup; | 
				
			||||
import jakarta.annotation.PostConstruct; | 
				
			||||
import jakarta.annotation.PreDestroy; | 
				
			||||
import jakarta.enterprise.context.ApplicationScoped; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.eclipse.microprofile.config.inject.ConfigProperty; | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Startup | 
				
			||||
@ApplicationScoped | 
				
			||||
public class FrpConsulRegister { | 
				
			||||
 | 
				
			||||
    @ConfigProperty(name = "quarkus.http.port") | 
				
			||||
    String localServicePort; | 
				
			||||
 | 
				
			||||
    private final String serviceId; | 
				
			||||
 | 
				
			||||
    private final RpcConfig rpcConfig; | 
				
			||||
 | 
				
			||||
    private final FrpcClient frpcClientClient; | 
				
			||||
 | 
				
			||||
    private final ConsulClient consulClient; | 
				
			||||
 | 
				
			||||
    private boolean registered = false; | 
				
			||||
 | 
				
			||||
    public FrpConsulRegister(RpcConfig rpcConfig, FrpcClient frpcClientClient, Requester requester, | 
				
			||||
                             ObjectMapper objectMapper) { | 
				
			||||
        this.rpcConfig = rpcConfig; | 
				
			||||
 | 
				
			||||
        this.frpcClientClient = frpcClientClient; | 
				
			||||
 | 
				
			||||
        this.serviceId = RandomUtil.randomString(8); | 
				
			||||
 | 
				
			||||
        this.consulClient = new ConsulClient( | 
				
			||||
                rpcConfig.getServiceName(), this.serviceId, | 
				
			||||
                rpcConfig.getConsulAddress(), | 
				
			||||
                objectMapper, requester); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostConstruct | 
				
			||||
    public void onStartup() { | 
				
			||||
        ThreadUtil.execute(() -> { | 
				
			||||
            try { | 
				
			||||
                log.info("连接frp并注册consul..."); | 
				
			||||
                this.doRegister(); | 
				
			||||
                log.info("注册完毕"); | 
				
			||||
            } catch (Exception e) { | 
				
			||||
                log.warn("注册服务时发生异常:", e); | 
				
			||||
                log.warn("不进行转发注册,直接服务"); | 
				
			||||
            } | 
				
			||||
        }); | 
				
			||||
 | 
				
			||||
        Runtime.getRuntime().addShutdownHook(new Thread(this::onShutdown, "ShutdownHookThread")); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PreDestroy | 
				
			||||
    public void onShutdown() { | 
				
			||||
        try { | 
				
			||||
            if (this.registered) { | 
				
			||||
                log.info("注销服务..."); | 
				
			||||
                this.consulClient.deregister(); | 
				
			||||
                this.frpcClientClient.removeProxy(); | 
				
			||||
                log.info("服务注销完毕"); | 
				
			||||
                this.registered = false; | 
				
			||||
            } | 
				
			||||
        } catch (Exception e) { | 
				
			||||
            log.warn("注销服务时发生异常:", e); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    private void doRegister() throws Exception { | 
				
			||||
        frpcClientClient.addFrpProxy( | 
				
			||||
                rpcConfig.getServiceName(), serviceId, | 
				
			||||
                "127.0.0.1", localServicePort | 
				
			||||
        ); | 
				
			||||
 | 
				
			||||
        String remoteAddress; | 
				
			||||
        String[] remote; | 
				
			||||
        int retry = 0; | 
				
			||||
        do { | 
				
			||||
            // 先睡个0.5秒等待连接成功再获取状态读端口
 | 
				
			||||
            ThreadUtil.sleep(500); | 
				
			||||
 | 
				
			||||
            JsonNode proxy = frpcClientClient.getProxyStatus(rpcConfig.getServiceName(), serviceId); | 
				
			||||
            remoteAddress = proxy.path("remote_addr") | 
				
			||||
                    .asText("127.0.0.1:" + localServicePort); | 
				
			||||
            remote = remoteAddress.split(":"); | 
				
			||||
            retry++; | 
				
			||||
        } while (retry < 3 && remote.length < 2); | 
				
			||||
        if (retry == 3) { | 
				
			||||
            throw new Exception("获取frp隧道信息重试次数过多,请手动添加隧道和注册中心"); | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        this.consulClient.register(remoteAddress, Integer.parseInt(remote[1])); | 
				
			||||
        this.registered = true; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,41 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.mywust.network.Requester; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.rpc.FrpConsulRegister; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.rpc.config.FrpConfig; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.rpc.config.RegisterConfig; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.config.RpcConfig; | 
				
			||||
import com.fasterxml.jackson.databind.ObjectMapper; | 
				
			||||
import io.quarkus.runtime.Startup; | 
				
			||||
import jakarta.annotation.PostConstruct; | 
				
			||||
import jakarta.enterprise.context.ApplicationScoped; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
import org.eclipse.microprofile.config.inject.ConfigProperty; | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
@Startup | 
				
			||||
@ApplicationScoped | 
				
			||||
public class Register { | 
				
			||||
 | 
				
			||||
    private final FrpConsulRegister register; | 
				
			||||
 | 
				
			||||
    public Register(RpcConfig rpcConfig, Requester requester, ObjectMapper objectMapper) { | 
				
			||||
        FrpConfig frpConfig = FrpConfig.builder() | 
				
			||||
                .frpcAdminAddress(rpcConfig.getFrpcAdminAddress()) | 
				
			||||
                .frpcAdminUsername(rpcConfig.getFrpcAdminUsername()) | 
				
			||||
                .frpcAdminPassword(rpcConfig.getFrpcAdminPassword()) | 
				
			||||
                .build(); | 
				
			||||
        RegisterConfig registerConfig = RegisterConfig.builder() | 
				
			||||
                .consulAddress(rpcConfig.getConsulAddress()) | 
				
			||||
                .localServicePort(rpcConfig.getLocalServicePort()) | 
				
			||||
                .serviceName(rpcConfig.getServiceName()) | 
				
			||||
                .build(); | 
				
			||||
 | 
				
			||||
        this.register = new FrpConsulRegister(registerConfig, frpConfig, requester, objectMapper); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    @PostConstruct | 
				
			||||
    public void onStartup() { | 
				
			||||
        register.register(); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,60 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc.client; | 
				
			||||
 | 
				
			||||
import cn.wustlinghang.mywust.network.request.RequestFactory; | 
				
			||||
import cn.wustlinghang.mywust.network.Requester; | 
				
			||||
import cn.wustlinghang.mywust.network.entitys.HttpResponse; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.entity.RegisterRequestBody; | 
				
			||||
import com.fasterxml.jackson.databind.ObjectMapper; | 
				
			||||
import com.google.common.collect.Lists; | 
				
			||||
import lombok.extern.slf4j.Slf4j; | 
				
			||||
 | 
				
			||||
import java.io.IOException; | 
				
			||||
 | 
				
			||||
@Slf4j | 
				
			||||
public class ConsulClient { | 
				
			||||
    private final String serviceId; | 
				
			||||
    private final String serviceName; | 
				
			||||
    private final String consulAddress; | 
				
			||||
    private final ObjectMapper objectMapper; | 
				
			||||
    private final Requester requester; | 
				
			||||
 | 
				
			||||
    public ConsulClient(String serviceName, String serviceId, String consulAddress, | 
				
			||||
                        ObjectMapper objectMapper, Requester requester) { | 
				
			||||
        this.serviceId = serviceId; | 
				
			||||
        this.serviceName = serviceName; | 
				
			||||
        this.consulAddress = consulAddress; | 
				
			||||
 | 
				
			||||
        this.objectMapper = objectMapper; | 
				
			||||
        this.requester = requester; | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public void register(String remoteAddress, int remotePort) throws IOException { | 
				
			||||
        var checksItem = RegisterRequestBody.ChecksItem.builder() | 
				
			||||
                .http("http://" + remoteAddress + "/health") | 
				
			||||
                .interval("3s") | 
				
			||||
                .build(); | 
				
			||||
 | 
				
			||||
        var registerRequestBody = RegisterRequestBody.builder() | 
				
			||||
                .id(serviceId) | 
				
			||||
                .name(serviceName) | 
				
			||||
                .address("127.0.0.1") | 
				
			||||
                .port(remotePort) | 
				
			||||
                .checks(Lists.newArrayList(checksItem)) | 
				
			||||
                .build(); | 
				
			||||
 | 
				
			||||
        byte[] registerRequestData = objectMapper.writeValueAsBytes(registerRequestBody); | 
				
			||||
        var registerRequest = RequestFactory.makeHttpRequest(consulAddress + "/v1/agent/service/register", registerRequestData); | 
				
			||||
        var registerResponse = requester.put(registerRequest); | 
				
			||||
        if (registerResponse.getStatusCode() != HttpResponse.HTTP_OK) { | 
				
			||||
            log.warn("注册中心注册不成功,请手动注册"); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public void deregister() throws IOException { | 
				
			||||
        var deregisterRequest = RequestFactory.makeHttpRequest(consulAddress + "/v1/agent/service/deregister/" + serviceId); | 
				
			||||
        var deregisterResponse = requester.put(deregisterRequest); | 
				
			||||
        if (deregisterResponse.getStatusCode() != HttpResponse.HTTP_OK) { | 
				
			||||
            log.warn("服务注销不成功,请手动注册"); | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,100 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc.client; | 
				
			||||
 | 
				
			||||
import cn.hutool.core.codec.Base64; | 
				
			||||
import cn.wustlinghang.mywust.network.request.RequestFactory; | 
				
			||||
import cn.wustlinghang.mywust.network.Requester; | 
				
			||||
import cn.wustlinghang.wusthelper.internal.undergrad.rpc.config.FrpConfig; | 
				
			||||
import com.fasterxml.jackson.databind.JsonNode; | 
				
			||||
import com.fasterxml.jackson.databind.ObjectMapper; | 
				
			||||
import com.fasterxml.jackson.databind.node.MissingNode; | 
				
			||||
import jakarta.inject.Singleton; | 
				
			||||
import org.ini4j.Ini; | 
				
			||||
 | 
				
			||||
import java.io.ByteArrayInputStream; | 
				
			||||
import java.io.ByteArrayOutputStream; | 
				
			||||
import java.io.IOException; | 
				
			||||
 | 
				
			||||
@Singleton | 
				
			||||
public class FrpcClient { | 
				
			||||
 | 
				
			||||
    private final String frpcAdminAddress; | 
				
			||||
 | 
				
			||||
    private final String frpAuthHeaderValue; | 
				
			||||
 | 
				
			||||
    private final Requester requester; | 
				
			||||
 | 
				
			||||
    private final ObjectMapper objectMapper; | 
				
			||||
 | 
				
			||||
    private String frpProxyName; | 
				
			||||
 | 
				
			||||
    public FrpcClient(FrpConfig frpConfig, | 
				
			||||
                      Requester requester, ObjectMapper objectMapper) { | 
				
			||||
 | 
				
			||||
        this.frpcAdminAddress = frpConfig.getFrpcAdminAddress(); | 
				
			||||
 | 
				
			||||
        this.requester = requester; | 
				
			||||
        this.objectMapper = objectMapper; | 
				
			||||
 | 
				
			||||
        String username = frpConfig.getFrpcAdminUsername(); | 
				
			||||
        String password = frpConfig.getFrpcAdminPassword(); | 
				
			||||
        this.frpAuthHeaderValue = "Basic " + Base64.encode(username + ":" + password); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public void addFrpProxy(String serviceName, String serviceId, String localAddress, String localPort) | 
				
			||||
            throws IOException { | 
				
			||||
        this.frpProxyName = String.format("%s-%s", serviceName, serviceId); | 
				
			||||
 | 
				
			||||
        Ini ini = this.getFrpConfig(); | 
				
			||||
        ini.put(frpProxyName, "type", "tcp"); | 
				
			||||
        ini.put(frpProxyName, "local_address", localAddress); | 
				
			||||
        ini.put(frpProxyName, "local_port", localPort); | 
				
			||||
        ini.put(frpProxyName, "use_compression", "true"); | 
				
			||||
 | 
				
			||||
        var output = new ByteArrayOutputStream(); | 
				
			||||
        ini.store(output); | 
				
			||||
 | 
				
			||||
        this.reloadFrpConfig(ini); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public void removeProxy() throws IOException { | 
				
			||||
        Ini ini = this.getFrpConfig(); | 
				
			||||
        ini.remove(this.frpProxyName); | 
				
			||||
 | 
				
			||||
        this.reloadFrpConfig(ini); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public Ini getFrpConfig() throws IOException { | 
				
			||||
        var frpConfigRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config"); | 
				
			||||
        frpConfigRequest.addHeaders("Authorization", frpAuthHeaderValue); | 
				
			||||
        var response = requester.get(frpConfigRequest); | 
				
			||||
 | 
				
			||||
        return new Ini(new ByteArrayInputStream(response.getBody())); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public void reloadFrpConfig(Ini ini) throws IOException { | 
				
			||||
        var output = new ByteArrayOutputStream(); | 
				
			||||
        ini.store(output); | 
				
			||||
 | 
				
			||||
        var uploadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config", output.toByteArray()); | 
				
			||||
        uploadRequest.addHeaders("Authorization", frpAuthHeaderValue); | 
				
			||||
        requester.put(uploadRequest); | 
				
			||||
        var reloadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/reload"); | 
				
			||||
        reloadRequest.addHeaders("Authorization", frpAuthHeaderValue); | 
				
			||||
        requester.get(reloadRequest); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    public JsonNode getProxyStatus(String serviceName, String serviceId) throws IOException { | 
				
			||||
        var statusRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/status"); | 
				
			||||
        statusRequest.addHeaders("Authorization", frpAuthHeaderValue); | 
				
			||||
        var statusResponse = requester.get(statusRequest); | 
				
			||||
 | 
				
			||||
        JsonNode proxies = objectMapper.readTree(statusResponse.getBody()).path("tcp"); | 
				
			||||
        for (JsonNode proxy : proxies) { | 
				
			||||
            if (proxy.path("name").asText().equals(serviceName + "-" + serviceId)) { | 
				
			||||
                return proxy; | 
				
			||||
            } | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
        return MissingNode.getInstance(); | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
@ -1,22 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc.config; | 
				
			||||
 | 
				
			||||
import jakarta.inject.Singleton; | 
				
			||||
import jakarta.ws.rs.DefaultValue; | 
				
			||||
import lombok.Data; | 
				
			||||
import org.eclipse.microprofile.config.inject.ConfigProperty; | 
				
			||||
 | 
				
			||||
@Data | 
				
			||||
@Singleton | 
				
			||||
public class FrpConfig { | 
				
			||||
    @DefaultValue("http://127.0.0.1:7400") | 
				
			||||
    @ConfigProperty(name = "frpc.admin-api.address") | 
				
			||||
    String frpcAdminAddress; | 
				
			||||
 | 
				
			||||
    @DefaultValue("") | 
				
			||||
    @ConfigProperty(name = "frpc.admin.username") | 
				
			||||
    String frpcAdminUsername; | 
				
			||||
 | 
				
			||||
    @DefaultValue("") | 
				
			||||
    @ConfigProperty(name = "frpc.admin.password") | 
				
			||||
    String frpcAdminPassword; | 
				
			||||
} | 
				
			||||
@ -1,13 +0,0 @@ | 
				
			||||
package cn.wustlinghang.wusthelper.internal.undergrad.rpc.entity; | 
				
			||||
 | 
				
			||||
import lombok.Builder; | 
				
			||||
 | 
				
			||||
import java.util.List; | 
				
			||||
 | 
				
			||||
@Builder | 
				
			||||
public record RegisterRequestBody(String address, int port, List<ChecksItem> checks, String name, String id) { | 
				
			||||
 | 
				
			||||
    @Builder | 
				
			||||
    public record ChecksItem(String http, String interval) { | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue