diff --git a/core/escape-NAT.go b/core/escape-NAT.go index 5bbb8a0..b96d547 100644 --- a/core/escape-NAT.go +++ b/core/escape-NAT.go @@ -1,62 +1,62 @@ package core import ( - "github.com/Akilan1999/p2p-rendering-computation/p2p/frp" - "time" + "github.com/Akilan1999/p2p-rendering-computation/p2p/frp" + "time" ) // EscapeNAT Func to escape NAT // - 1 port for server // - 2 port for barrierKVM func EscapeNAT(ScreenSharePort, GameplayServerPort string) (ServerPort string, ScreensharePort string, err error) { - // Get free port from P2PRC server node - serverPort, err := frp.GetFRPServerPort("http://64.227.168.102:8088") + // Get free port from P2PRC server node + serverPort, err := frp.GetFRPServerPort("http://64.227.168.102:8088") - if err != nil { - return - } + if err != nil { + return + } - time.Sleep(1 * time.Second) + time.Sleep(1 * time.Second) - // port for the remote gameplay server - ServerPort, err = frp.StartFRPClientForServer("64.227.168.102", serverPort, GameplayServerPort) - if err != nil { - return - } + // port for the remote gameplay server + ServerPort, err = frp.StartFRPClientForServer("64.227.168.102", serverPort, GameplayServerPort) + if err != nil { + return + } - // Get free port from P2PRC server node - ScreensharePortFRP, err := frp.GetFRPServerPort("http://64.227.168.102:8088") + // Get free port from P2PRC server node + ScreensharePortFRP, err := frp.GetFRPServerPort("http://64.227.168.102:8088") - if err != nil { - return - } + if err != nil { + return + } - time.Sleep(1 * time.Second) + time.Sleep(1 * time.Second) - // port for the screenshare port - ScreensharePort, err = frp.StartFRPClientForServer("64.227.168.102", ScreensharePortFRP, ScreenSharePort) - if err != nil { - return - } + // port for the screenshare port + ScreensharePort, err = frp.StartFRPClientForServer("64.227.168.102", ScreensharePortFRP, ScreenSharePort) + if err != nil { + return + } - return + return } func EscapeNATBarrier() (barrierKVMport string, err error) { - // Get free port from P2PRC server node - serverPort, err := frp.GetFRPServerPort("http://64.227.168.102:8088") + // Get free port from P2PRC server node + serverPort, err := frp.GetFRPServerPort("http://64.227.168.102:8088") - if err != nil { - return - } + if err != nil { + return + } - time.Sleep(1 * time.Second) + time.Sleep(1 * time.Second) - //port for the barrierKVM server - barrierKVMport, err = frp.StartFRPClientForServer("64.227.168.102", serverPort, "24800") - if err != nil { - return - } + //port for the barrierKVM server + barrierKVMport, err = frp.StartFRPClientForServer("64.227.168.102", serverPort, "24798") + if err != nil { + return + } - return + return } diff --git a/core/signal.go b/core/signal.go index 0d110b1..1449a01 100644 --- a/core/signal.go +++ b/core/signal.go @@ -1,212 +1,213 @@ package core import ( - "crypto/tls" - "fmt" - "github.com/Akilan1999/remotegameplay/config" - "github.com/gorilla/websocket" - "log" - "net/http" - "time" + "crypto/tls" + "fmt" + "github.com/Akilan1999/remotegameplay/config" + "github.com/gorilla/websocket" + "log" + "net/http" + "time" ) type WSMessage struct { - SessionID string - Type string - Value string + SessionID string + Type string + Value string } var upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, + ReadBufferSize: 1024, + WriteBufferSize: 1024, } func sendHeartBeatWS(ticker *time.Ticker, conn *websocket.Conn, quit chan struct{}) { - for { - select { - case <-ticker.C: - _ = conn.WriteJSON(WSMessage{ - Type: "beat", - }) - case <-quit: - log.Println("heartbeat stopped") - return - } - } + for { + select { + case <-ticker.C: + _ = conn.WriteJSON(WSMessage{ + Type: "beat", + }) + case <-quit: + log.Println("heartbeat stopped") + return + } + } } func GetHttp() *http.ServeMux { - http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - server := http.NewServeMux() + http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + server := http.NewServeMux() - server.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("files/static")))) + server.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("files/static")))) - server.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - http.ServeFile(w, r, "files/main.html") - }) + server.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "files/main.html") + }) - //Get hostname of the current machine - server.HandleFunc("/hostname", func(w http.ResponseWriter, r *http.Request) { + //Get hostname of the current machine + server.HandleFunc("/hostname", func(w http.ResponseWriter, r *http.Request) { - // Read hostname from config file - configResp, err := config.ConfigInit() - if err != nil { - print(err) - return - } + // Read hostname from config file + configResp, err := config.ConfigInit() + if err != nil { + print(err) + return + } - fmt.Fprintf(w, configResp.SystemUsername) - }) + fmt.Fprintf(w, configResp.SystemUsername) + }) - //Get SSH password of the current machine - server.HandleFunc("/SSHPassword", func(w http.ResponseWriter, r *http.Request) { + //Get SSH password of the current machine + server.HandleFunc("/SSHPassword", func(w http.ResponseWriter, r *http.Request) { - // Read hostname from config file - configResp, err := config.ConfigInit() - if err != nil { - print(err) - return - } + // Read hostname from config file + configResp, err := config.ConfigInit() + if err != nil { + print(err) + return + } - fmt.Fprintf(w, configResp.SSHPassword) - }) + fmt.Fprintf(w, configResp.SSHPassword) + }) - server.HandleFunc("/ws_serve", func(writer http.ResponseWriter, request *http.Request) { - conn, _ := upgrader.Upgrade(writer, request, nil) - room := NewRoom(conn) - if err := conn.WriteJSON(WSMessage{ - SessionID: "", - Type: "newRoom", - Value: room.ID, - }); err != nil { - log.Println("newSessionWriteJsonError.", err) - return - } + server.HandleFunc("/ws_serve", func(writer http.ResponseWriter, request *http.Request) { + conn, _ := upgrader.Upgrade(writer, request, nil) + room := NewRoom(conn) + if err := conn.WriteJSON(WSMessage{ + SessionID: "", + Type: "newRoom", + Value: room.ID, + }); err != nil { + log.Println("newSessionWriteJsonError.", err) + return + } - go func(r *Room) { - ticker := time.NewTicker(10 * time.Second) - quit := make(chan struct{}) - defer func() { - ticker.Stop() - _ = room.CallerConn.Close() - close(quit) - RemoveRoom(r.ID) + go func(r *Room) { + ticker := time.NewTicker(10 * time.Second) + quit := make(chan struct{}) + defer func() { + ticker.Stop() + _ = room.CallerConn.Close() + close(quit) + RemoveRoom(r.ID) - // Close the barrier session - if r.BarrierSession != nil { - r.BarrierSession.DeleteBarrierSession() - } + // Close the barrier session + if r.BarrierSession != nil { + r.BarrierSession.DeleteBarrierSession() + } - for sID, s := range r.Sessions { - _ = s.CalleeConn.WriteJSON(WSMessage{ - Type: "roomClosed", - SessionID: sID, - }) - } - }() + for sID, s := range r.Sessions { + _ = s.CalleeConn.WriteJSON(WSMessage{ + Type: "roomClosed", + SessionID: sID, + }) + } + }() - go sendHeartBeatWS(ticker, conn, quit) + go sendHeartBeatWS(ticker, conn, quit) - //noinspection ALL - defer room.CallerConn.Close() - for { - var msg WSMessage - if err := room.CallerConn.ReadJSON(&msg); err != nil { - log.Println("websocketError.", err) - return - } - //log.Println(msg) - s := room.GetSession(msg.SessionID) - if s == nil { - log.Println("session nil.", msg.SessionID) - } - if msg.Type == "addCallerIceCandidate" { - s.CallerIceCandidates = append(s.CallerIceCandidates, msg.Value) - } else if msg.Type == "gotOffer" { - s.Offer = msg.Value - } - if err := s.CalleeConn.WriteJSON(msg); err != nil { - log.Println("serveEchoWriteJsonError.", err) - } - } - }(room) - }) + //noinspection ALL + defer room.CallerConn.Close() + for { + var msg WSMessage + if err := room.CallerConn.ReadJSON(&msg); err != nil { + log.Println("websocketError.", err) + return + } + //log.Println(msg) + s := room.GetSession(msg.SessionID) + if s == nil { + log.Println("session nil.", msg.SessionID) + } + if msg.Type == "addCallerIceCandidate" { + s.CallerIceCandidates = append(s.CallerIceCandidates, msg.Value) + } else if msg.Type == "gotOffer" { + s.Offer = msg.Value + } + if err := s.CalleeConn.WriteJSON(msg); err != nil { + log.Println("serveEchoWriteJsonError.", err) + } + } + }(room) + }) - server.HandleFunc("/ws_connect", func(writer http.ResponseWriter, request *http.Request) { - conn, _ := upgrader.Upgrade(writer, request, nil) + server.HandleFunc("/ws_connect", func(writer http.ResponseWriter, request *http.Request) { + conn, _ := upgrader.Upgrade(writer, request, nil) - ids, ok := request.URL.Query()["id"] + ids, ok := request.URL.Query()["id"] - if !ok || ids[0] == "" { - return - } + if !ok || ids[0] == "" { + return + } - room := GetRoom(ids[0]) + room := GetRoom(ids[0]) - ip, ok := request.URL.Query()["barrierip"] + ip, ok := request.URL.Query()["barrierip"] - if ok && ip[0] != "" { - //Declaring struct - var barriersession Barrier - barriersession.IPAddress = ip[0] - room.BarrierSession = &barriersession - // Creates a barrier session - err := room.BarrierSession.CreateBarrierSession() - if err != nil { - return - } - } + if ok && ip[0] != "" { + //Declaring struct + var barriersession Barrier + barriersession.IPAddress = ip[0] + fmt.Println(ip[0]) + room.BarrierSession = &barriersession + // Creates a barrier session + err := room.BarrierSession.CreateBarrierSession() + if err != nil { + return + } + } - if room == nil { - _ = conn.WriteJSON(WSMessage{ - Type: "roomNotFound", - }) - return - } + if room == nil { + _ = conn.WriteJSON(WSMessage{ + Type: "roomNotFound", + }) + return + } - session := room.NewSession(conn) + session := room.NewSession(conn) - if err := room.CallerConn.WriteJSON(WSMessage{ - SessionID: session.ID, - Type: "newSession", - Value: session.ID, - }); err != nil { - log.Println("callerWriteJsonError.", err) - return - } + if err := room.CallerConn.WriteJSON(WSMessage{ + SessionID: session.ID, + Type: "newSession", + Value: session.ID, + }); err != nil { + log.Println("callerWriteJsonError.", err) + return + } - if err := conn.WriteJSON(WSMessage{ - SessionID: session.ID, - Type: "newSession", - Value: session.ID, - }); err != nil { - log.Println("calleeWriteJsonError.", err) - return - } + if err := conn.WriteJSON(WSMessage{ + SessionID: session.ID, + Type: "newSession", + Value: session.ID, + }); err != nil { + log.Println("calleeWriteJsonError.", err) + return + } - go func(s *StreamSession) { - //noinspection ALL - defer s.CalleeConn.Close() - for { - var msg WSMessage - if err := conn.ReadJSON(&msg); err != nil { - log.Println("websocketError.", err) - return - } - //log.Println(msg) - if msg.SessionID == s.ID { - if msg.Type == "addCalleeIceCandidate" { - s.CalleeIceCandidates = append(s.CalleeIceCandidates, msg.Value) - } else if msg.Type == "gotAnswer" { - s.Answer = msg.Value - } - if err := s.CallerConn.WriteJSON(msg); err != nil { - log.Println("connectEchoWriteJsonError.", err) - } - } - } - }(session) - }) + go func(s *StreamSession) { + //noinspection ALL + defer s.CalleeConn.Close() + for { + var msg WSMessage + if err := conn.ReadJSON(&msg); err != nil { + log.Println("websocketError.", err) + return + } + //log.Println(msg) + if msg.SessionID == s.ID { + if msg.Type == "addCalleeIceCandidate" { + s.CalleeIceCandidates = append(s.CalleeIceCandidates, msg.Value) + } else if msg.Type == "gotAnswer" { + s.Answer = msg.Value + } + if err := s.CallerConn.WriteJSON(msg); err != nil { + log.Println("connectEchoWriteJsonError.", err) + } + } + } + }(session) + }) - return server + return server }