From 3793b614dbcb80468100836c01a2eaf94fa093a5 Mon Sep 17 00:00:00 2001 From: Hiddify Date: Sun, 3 Mar 2024 06:56:41 +0100 Subject: [PATCH] add dynamic port --- v2/example_server/main.go | 4 +++- v2/grpc_server.go | 29 ++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/v2/example_server/main.go b/v2/example_server/main.go index 5b16ff9..f4ae948 100644 --- a/v2/example_server/main.go +++ b/v2/example_server/main.go @@ -9,7 +9,9 @@ import ( ) func main() { - v2.StartGrpcServer() + + // defer C.free(unsafe.Pointer(port)) + v2.StartGrpcServerGo("127.0.0.1:50051") sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) <-sigChan diff --git a/v2/grpc_server.go b/v2/grpc_server.go index 109e4b3..231fae4 100644 --- a/v2/grpc_server.go +++ b/v2/grpc_server.go @@ -1,5 +1,9 @@ package v2 +/* +#include "stdint.h" +*/ + import "C" import ( "log" @@ -9,26 +13,37 @@ import ( "google.golang.org/grpc" ) -const ( - port = ":50051" -) - type server struct { pb.UnimplementedHiddifyServer } //export StartGrpcServer -func StartGrpcServer() { - lis, err := net.Listen("tcp", port) +func StartGrpcServer(listenAddress *C.char) (CErr *C.char) { + //Example Listen Address: "127.0.0.1:50051" + err := StartGrpcServerGo(C.GoString(listenAddress)) + if err != nil { + return C.CString(err.Error()) + } + return nil +} + +func StartGrpcServerGo(listenAddressG string) error { + //Example Listen Address: "127.0.0.1:50051" + // defer C.free(unsafe.Pointer(CErr)) // free the C string when it's no longer needed + // defer C.free(unsafe.Pointer(listenAddress)) // free the C string when it's no longer needed + + lis, err := net.Listen("tcp", listenAddressG) if err != nil { log.Printf("failed to listen: %v", err) + return err } s := grpc.NewServer() pb.RegisterHiddifyServer(s, &server{}) - log.Printf("Server listening on %s", port) + log.Printf("Server listening on %s", listenAddressG) go func() { if err := s.Serve(lis); err != nil { log.Printf("failed to serve: %v", err) } }() + return nil }