]> git.feebdaed.xyz Git - gomehub.git/commitdiff
Adding sorrylinus roundtripper
authorseantywork <seantywork@gmail.com>
Fri, 12 Jul 2024 08:33:19 +0000 (17:33 +0900)
committerseantywork <seantywork@gmail.com>
Fri, 12 Jul 2024 08:33:19 +0000 (17:33 +0900)
ctl/config.go
ctl/ctl.go
pkg/sorrylinus/roundtrip.go [new file with mode: 0644]
pkg/sorrylinus/sorrylinus.go

index 38fe7bc4bb6e8e915d9dc362de72c1e1696bbb44..2014ea08b10546362bda8692518ada35bcabafc4 100644 (file)
@@ -17,6 +17,11 @@ type SOLIAGAIN_CONFIG struct {
                ChannelPort         int `yaml:"channelPort"`
                ChannelPortExternal int `yaml:"channelPortExternal"`
        } `yaml:"channel"`
+       Sorrylinus struct {
+               FrontAddr      string `yaml:"frontAddr"`
+               SoliSignalAddr string `yaml:"soliSignalAddr"`
+               TimeoutSec     int    `yaml:"timeoutSec"`
+       } `yaml:"sorrylinus"`
        Edition struct {
                ExtAllowList []string `yaml:"extAllowList"`
        } `yaml:"edition"`
index a751f2efce6e88fd9de1c9d51d6cc96424d46a4d..f9add1799df1b9259b68077078d953c514f0ea5f 100644 (file)
@@ -9,6 +9,7 @@ import (
        pkgauth "github.com/seantywork/sorrylinus-again/pkg/auth"
        pkgcom "github.com/seantywork/sorrylinus-again/pkg/com"
        pkgedition "github.com/seantywork/sorrylinus-again/pkg/edition"
+       pkgsoli "github.com/seantywork/sorrylinus-again/pkg/sorrylinus"
        pkgstream "github.com/seantywork/sorrylinus-again/pkg/stream"
        pkgutils "github.com/seantywork/sorrylinus-again/pkg/utils"
 )
@@ -33,11 +34,15 @@ func ConfigureRuntime(e *gin.Engine) {
 
        e.MaxMultipartMemory = CONF.MaxFileSize
 
-       pkgauth.DEBUG = CONF.Debug
+       pkgsoli.SOLI_FRONT_ADDR = CONF.Sorrylinus.FrontAddr
 
-       pkgstream.EXTERNAL_URL = CONF.ExternalUrl
+       pkgsoli.SOLI_SIGNAL_PATH = CONF.Sorrylinus.SoliSignalAddr
 
-       pkgstream.INTERNAL_URL = CONF.InternalUrl
+       pkgsoli.TIMEOUT_SEC = CONF.Sorrylinus.TimeoutSec
+
+       pkgsoli.EXTERNAL_URL = CONF.ExternalUrl
+
+       pkgauth.DEBUG = CONF.Debug
 
        pkgcom.CHANNEL_ADDR = CONF.ServeAddr
        pkgcom.CHANNEL_PORT = fmt.Sprintf("%d", CONF.Com.ChannelPort)
@@ -60,6 +65,10 @@ func ConfigureRuntime(e *gin.Engine) {
                pkgstream.TURN_SERVER_ADDR = append(pkgstream.TURN_SERVER_ADDR, tmp)
        }
 
+       pkgstream.EXTERNAL_URL = CONF.ExternalUrl
+
+       pkgstream.INTERNAL_URL = CONF.InternalUrl
+
        pkgstream.PEERS_SIGNAL_PATH = CONF.Stream.PeerSignalAddr
 
        pkgstream.RTCP_PLI_INTERVAL = time.Second * time.Duration(CONF.Stream.RtcpPLIInterval)
@@ -123,11 +132,7 @@ func RegisterRoutes(e *gin.Engine) {
 
        // sorrylinus
 
-       // e.POST("/api/sorrylinus/connect", pkgsoli.Connect)
-
-       // e.POST("/api/sorrylinus/disconnect", pkgsoli.Disconnect)
-
-       // e.POST("/api/sorrylinus/rt", pkgsoli.RoundTripEx)
+       e.GET("/api/sorrylinus/signal/address", pkgsoli.GetSoliSignalAddress)
 
        // edition
 
@@ -161,6 +166,8 @@ func RegisterRoutes(e *gin.Engine) {
 
        // com
 
+       pkgcom.AddChannelHandler(CONF.Sorrylinus.SoliSignalAddr, pkgsoli.SoliSignalHandler)
+
        pkgcom.AddChannelHandler(CONF.Stream.PeerSignalAddr, pkgstream.RoomSignalHandler)
 
        pkgcom.AddChannelCallback(pkgstream.SignalDispatcher)
diff --git a/pkg/sorrylinus/roundtrip.go b/pkg/sorrylinus/roundtrip.go
new file mode 100644 (file)
index 0000000..56eae71
--- /dev/null
@@ -0,0 +1,8 @@
+package sorrylinus
+
+func RoundTrip(req *RT_REQ_DATA) (*RT_RESP_DATA, error) {
+
+       var resp RT_RESP_DATA
+
+       return &resp, nil
+}
index de21021a89a2ce5cbc5f2dc93d0a3658f96892a2..f5447995652dfce38544c1ba1ef0dfb34721164a 100644 (file)
 package sorrylinus
 
-import "github.com/gin-gonic/gin"
+import (
+       "log"
+       "net/http"
+       "time"
 
-func Connect(c *gin.Context) {
+       "github.com/gin-gonic/gin"
+       "github.com/gorilla/websocket"
+       "github.com/seantywork/sorrylinus-again/pkg/com"
+)
 
-}
+var SOLI_FRONT_ADDR string
+
+var SOLI_SIGNAL_PATH string
 
-func Disconnect(c *gin.Context) {
+var EXTERNAL_URL string
 
+var TIMEOUT_SEC int
+
+type RT_REQ_DATA struct {
+       Command string `json:"command"`
+       Data    string `json:"data"`
 }
 
-func RoundTripEx(c *gin.Context) {
+type RT_RESP_DATA struct {
+       Status string `json:"status"`
+       Data   string `json:"data"`
+}
+
+var UREG map[*websocket.Conn]string
+
+var UPGRADER = websocket.Upgrader{}
+
+func GetSoliSignalAddress(c *gin.Context) {
+
+       s_addr := EXTERNAL_URL + ":" + com.CHANNEL_PORT_EXTERNAL + SOLI_SIGNAL_PATH
+
+       c.JSON(http.StatusOK, com.SERVER_RE{Status: "success", Reply: s_addr})
 
 }
 
-func RoundTrip() {
+func SoliSignalHandler(w http.ResponseWriter, r *http.Request) {
+
+       c, _, err := websocket.DefaultDialer.Dial(SOLI_FRONT_ADDR, nil)
+
+       if err != nil {
+               log.Fatal("dial:", err)
+       }
+
+       defer c.Close()
+
+       timeout_iter_count := 0
+
+       timeout_iter := TIMEOUT_SEC * 10
+
+       ticker := time.NewTicker(100 * time.Millisecond)
+
+       received_auth := make(chan RT_REQ_DATA)
+
+       got_auth := 0
+
+       c_ret := RT_RESP_DATA{}
+
+       var req RT_REQ_DATA
+
+       go func() {
+
+               auth_req := RT_REQ_DATA{}
+
+               err := c.ReadJSON(&auth_req)
+
+               if err != nil {
+
+                       log.Fatal("read auth:", err)
+                       return
+               }
+
+               received_auth <- auth_req
+
+       }()
+
+       for got_auth == 0 {
+
+               select {
+
+               case <-ticker.C:
+
+                       if timeout_iter_count <= timeout_iter {
+
+                               timeout_iter_count += 1
+
+                       } else {
+
+                               log.Fatal("read auth timed out:", err)
+
+                               return
+                       }
+
+               case a := <-received_auth:
+
+                       req = a
+
+                       got_auth = 1
+
+                       break
+               }
+
+       }
+
+       resp, err := RoundTrip(&req)
+
+       if err != nil {
+
+               c_ret.Status = "error"
+
+               c.WriteJSON(c_ret)
+
+               log.Fatal("rt: auth error:", err)
+
+               return
+       }
+
+       if resp.Status != "success" {
+
+               c_ret.Status = "error"
+
+               c_ret.Data = "authentication failed"
+
+               c.WriteJSON(c_ret)
+
+               return
+
+       }
 
 }