package boot import ( "encoding/json" "g365sfu/bytebuffer" "g365sfu/logger" "g365sfu/sfu" "g365sfu/socket" "net/http" "os" "github.com/gorilla/websocket" "github.com/joho/godotenv" "github.com/pion/webrtc/v4" ) func Bootstrap() { godotenv.Load() sfu.InitWebRTCEngines() if os.Getenv("SECRET") == "" { logger.LogErrorMessage("server failed to start because not set secret key in .env variables") return } http.HandleFunc("/", socket.HandleWebSocket) port := os.Getenv("PORT") if port == "" { port = "1001" } sfu.OnLocalICECandidate = OnLocalICECandidate logger.LogInfoMessage("server started at x.x.x.x:" + port) http.ListenAndServe(":"+port, nil) } func OnLocalICECandidate(roomID string, peerID string, candidate webrtc.ICECandidateInit) { room, exists := sfu.GetRoom(roomID) if !exists { logger.LogWarnMessage("tried to send local ICE candidate to non existing room " + roomID) return } jsonCandidate, _ := json.Marshal(candidate) buffer := bytebuffer.Allocate( 1 + 4 + len([]byte(roomID)) + 4 + len([]byte(peerID)) + 4 + len(jsonCandidate), ) buffer.Put(0x04) buffer.PutUint32(uint32(len([]byte(roomID)))) buffer.PutBytes([]byte(roomID)) buffer.PutUint32(uint32(len([]byte(peerID)))) buffer.PutBytes([]byte(peerID)) buffer.PutUint32(uint32(len([]byte(jsonCandidate)))) buffer.PutBytes([]byte(jsonCandidate)) buffer.Flip() room.Server.Socket.WriteMessage(websocket.BinaryMessage, buffer.Bytes()) } func OnServerOffer(roomID string, peerID string, offer webrtc.SessionDescription) { logger.LogInfoMessage("new server offer for peer " + peerID + " in room " + roomID) }