testing remote gameplay
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
341
core/signal.go
341
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user