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