mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-01-23 18:46:11 +00:00
Clean code
This commit is contained in:
parent
041e805963
commit
5320283f63
6 changed files with 38 additions and 239 deletions
|
|
@ -6,7 +6,6 @@ import (
|
|||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/giongto35/cloud-game/config"
|
||||
"github.com/giongto35/cloud-game/handler"
|
||||
|
|
@ -21,9 +20,6 @@ const (
|
|||
)
|
||||
|
||||
// Time allowed to write a message to the peer.
|
||||
var readWait = 30 * time.Second
|
||||
var writeWait = 30 * time.Second
|
||||
|
||||
var upgrader = websocket.Upgrader{}
|
||||
|
||||
// initilizeOverlord setup an overlord server
|
||||
|
|
|
|||
|
|
@ -13,11 +13,6 @@ import (
|
|||
|
||||
type BrowserClient struct {
|
||||
*cws.Client
|
||||
//session *Session
|
||||
//oclient *OverlordClient
|
||||
//gameName string
|
||||
//roomID string
|
||||
//playerIndex int
|
||||
}
|
||||
|
||||
func (s *Session) RegisterBrowserClient() {
|
||||
|
|
@ -130,26 +125,7 @@ func (s *Session) RegisterBrowserClient() {
|
|||
|
||||
// NewOverlordClient returns a client connecting to browser. This connection exchanges information between clients and server
|
||||
func NewBrowserClient(c *websocket.Conn) *BrowserClient {
|
||||
//roomID := ""
|
||||
//gameName := ""
|
||||
//playerIndex := 0
|
||||
// Create connection to overlord
|
||||
browserClient := &BrowserClient{
|
||||
return &BrowserClient{
|
||||
Client: cws.NewClient(c),
|
||||
//gameName: "",
|
||||
//roomID: "",
|
||||
//playerIndex: 0,
|
||||
}
|
||||
|
||||
//sessionID := strconv.Itoa(rand.Int())
|
||||
//sessionID := uuid.Must(uuid.NewV4()).String()
|
||||
|
||||
//wssession := &Session{
|
||||
//BrowserClient: browserClient,
|
||||
//OverlordClient: overlordClient,
|
||||
//peerconnection: webrtc.NewWebRTC(),
|
||||
//// The server session is maintaining
|
||||
//}
|
||||
|
||||
return browserClient
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import (
|
|||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/giongto35/cloud-game/config"
|
||||
"github.com/giongto35/cloud-game/cws"
|
||||
"github.com/giongto35/cloud-game/handler/gamelist"
|
||||
"github.com/giongto35/cloud-game/webrtc"
|
||||
|
|
@ -16,8 +15,6 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
scale = 3
|
||||
title = "NES"
|
||||
gameboyIndex = "./static/gameboy.html"
|
||||
debugIndex = "./static/index_ws.html"
|
||||
)
|
||||
|
|
@ -29,10 +26,6 @@ var writeWait = 30 * time.Second
|
|||
// Flag to determine if the server is overlord or not
|
||||
var upgrader = websocket.Upgrader{}
|
||||
|
||||
// ID to peerconnection
|
||||
//var peerconnections = map[string]*webrtc.WebRTC{}
|
||||
//var oclient *OverlordClient
|
||||
|
||||
type Handler struct {
|
||||
oClient *OverlordClient
|
||||
rooms map[string]*Room
|
||||
|
|
@ -50,10 +43,6 @@ type Handler struct {
|
|||
|
||||
// NewHandler returns a new server
|
||||
func NewHandler(overlordConn *websocket.Conn, isDebug bool, gamePath string) *Handler {
|
||||
//conn, err := createOverlordConnection()
|
||||
//if err != nil {
|
||||
//return nil, err
|
||||
//}
|
||||
return &Handler{
|
||||
oClient: NewOverlordClient(overlordConn),
|
||||
rooms: map[string]*Room{},
|
||||
|
|
@ -83,6 +72,8 @@ func (h *Handler) GetWeb(w http.ResponseWriter, r *http.Request) {
|
|||
// WS handles normal traffic (from browser to host)
|
||||
func (h *Handler) WS(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
defer c.Close()
|
||||
|
||||
if err != nil {
|
||||
log.Print("[!] WS upgrade:", err)
|
||||
return
|
||||
|
|
@ -114,135 +105,30 @@ func (h *Handler) WS(w http.ResponseWriter, r *http.Request) {
|
|||
}, nil)
|
||||
|
||||
wssession.BrowserClient.Listen()
|
||||
|
||||
defer c.Close()
|
||||
//var gameName string
|
||||
//var roomID string
|
||||
//var playerIndex int
|
||||
|
||||
//// Create connection to overlord
|
||||
//client := NewClient(c)
|
||||
////sessionID := strconv.Itoa(rand.Int())
|
||||
//sessionID := uuid.Must(uuid.NewV4()).String()
|
||||
|
||||
//wssession := &Session{
|
||||
//client: client,
|
||||
//peerconnection: webrtc.NewWebRTC(),
|
||||
//// The server session is maintaining
|
||||
//}
|
||||
|
||||
//client.send(WSPacket{
|
||||
//ID: "gamelist",
|
||||
//Data: getEncodedGameList(),
|
||||
//}, nil)
|
||||
|
||||
//client.receive("heartbeat", func(resp WSPacket) WSPacket {
|
||||
//return resp
|
||||
//})
|
||||
|
||||
//client.receive("initwebrtc", func(resp WSPacket) WSPacket {
|
||||
//log.Println("Received user SDP")
|
||||
//localSession, err := wssession.peerconnection.StartClient(resp.Data, width, height)
|
||||
//if err != nil {
|
||||
//log.Fatalln(err)
|
||||
//}
|
||||
|
||||
//return WSPacket{
|
||||
//ID: "sdp",
|
||||
//Data: localSession,
|
||||
//SessionID: sessionID,
|
||||
//}
|
||||
//})
|
||||
|
||||
//client.receive("save", func(resp WSPacket) (req WSPacket) {
|
||||
//log.Println("Saving game state")
|
||||
//req.ID = "save"
|
||||
//req.Data = "ok"
|
||||
//if roomID != "" {
|
||||
//err = rooms[roomID].director.SaveGame()
|
||||
//if err != nil {
|
||||
//log.Println("[!] Cannot save game state: ", err)
|
||||
//req.Data = "error"
|
||||
//}
|
||||
//} else {
|
||||
//req.Data = "error"
|
||||
//}
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//client.receive("load", func(resp WSPacket) (req WSPacket) {
|
||||
//log.Println("Loading game state")
|
||||
//req.ID = "load"
|
||||
//req.Data = "ok"
|
||||
//if roomID != "" {
|
||||
//err = rooms[roomID].director.LoadGame()
|
||||
//if err != nil {
|
||||
//log.Println("[!] Cannot load game state: ", err)
|
||||
//req.Data = "error"
|
||||
//}
|
||||
//} else {
|
||||
//req.Data = "error"
|
||||
//}
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//client.receive("start", func(resp WSPacket) (req WSPacket) {
|
||||
//gameName = resp.Data
|
||||
//roomID = resp.RoomID
|
||||
//playerIndex = resp.PlayerIndex
|
||||
//isNewRoom := false
|
||||
|
||||
//log.Println("Starting game")
|
||||
//// If we are connecting to overlord, request serverID from roomID
|
||||
//if oclient != nil {
|
||||
//roomServerID := getServerIDOfRoom(oclient, roomID)
|
||||
//log.Println("Server of RoomID ", roomID, " is ", roomServerID)
|
||||
//if roomServerID != "" && wssession.ServerID != roomServerID {
|
||||
//// TODO: Re -register
|
||||
//go bridgeConnection(wssession, roomServerID, gameName, roomID, playerIndex)
|
||||
//return
|
||||
//}
|
||||
//}
|
||||
|
||||
//roomID, isNewRoom = startSession(wssession.peerconnection, gameName, roomID, playerIndex)
|
||||
//// Register room to overlord if we are connecting to overlord
|
||||
//if isNewRoom && oclient != nil {
|
||||
//oclient.send(WSPacket{
|
||||
//ID: "registerRoom",
|
||||
//Data: roomID,
|
||||
//}, nil)
|
||||
//}
|
||||
//req.ID = "start"
|
||||
//req.RoomID = roomID
|
||||
//req.SessionID = sessionID
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//client.receive("candidate", func(resp WSPacket) (req WSPacket) {
|
||||
//// Unuse code
|
||||
//hi := pionRTC.ICECandidateInit{}
|
||||
//err = json.Unmarshal([]byte(resp.Data), &hi)
|
||||
//if err != nil {
|
||||
//log.Println("[!] Cannot parse candidate: ", err)
|
||||
//} else {
|
||||
//// webRTC.AddCandidate(hi)
|
||||
//}
|
||||
//req.ID = "candidate"
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//client.Listen()
|
||||
}
|
||||
|
||||
func createOverlordConnection() (*websocket.Conn, error) {
|
||||
c, _, err := websocket.DefaultDialer.Dial(*config.OverlordHost, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
// getRoom returns room from roomID
|
||||
func (h *Handler) getRoom(roomID string) *Room {
|
||||
room, ok := h.rooms[roomID]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
return c, nil
|
||||
return room
|
||||
}
|
||||
|
||||
// createNewRoom creates a new room
|
||||
// Return nil in case of room is existed
|
||||
func (h *Handler) createNewRoom(gameName string, roomID string, playerIndex int) *Room {
|
||||
// If the roomID is empty,
|
||||
// or the roomID doesn't have any running sessions (room was closed)
|
||||
// we spawn a new room
|
||||
if roomID == "" || !h.isRoomRunning(roomID) {
|
||||
room := NewRoom(roomID, gameName)
|
||||
// TODO: Might have race condition
|
||||
h.rooms[roomID] = room
|
||||
return room
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,9 +114,9 @@ func getServerIDOfRoom(oc *OverlordClient, roomID string) string {
|
|||
return packet.Data
|
||||
}
|
||||
|
||||
func (session *Session) bridgeConnection(serverID string, gameName string, roomID string, playerIndex int) {
|
||||
func (s *Session) bridgeConnection(serverID string, gameName string, roomID string, playerIndex int) {
|
||||
log.Println("Bridging connection to other Host ", serverID)
|
||||
client := session.BrowserClient
|
||||
client := s.BrowserClient
|
||||
// Ask client to init
|
||||
|
||||
log.Println("Requesting offer to browser", serverID)
|
||||
|
|
@ -128,20 +128,16 @@ func (session *Session) bridgeConnection(serverID string, gameName string, roomI
|
|||
log.Println("Sending offer to overlord to relay message to target host", resp.TargetHostID)
|
||||
// Ask overlord to relay SDP packet to serverID
|
||||
resp.TargetHostID = serverID
|
||||
remoteTargetSDP := session.OverlordClient.SyncSend(resp)
|
||||
remoteTargetSDP := s.OverlordClient.SyncSend(resp)
|
||||
log.Println("Got back remote host SDP, sending to browser")
|
||||
// Send back remote SDP of remote server to browser
|
||||
//client.syncSend(WSPacket{
|
||||
//ID: "sdp",
|
||||
//Data: remoteTargetSDP.Data,
|
||||
//})
|
||||
session.BrowserClient.Send(cws.WSPacket{
|
||||
s.BrowserClient.Send(cws.WSPacket{
|
||||
ID: "sdp",
|
||||
Data: remoteTargetSDP.Data,
|
||||
}, nil)
|
||||
log.Println("Init session done, start game on target host")
|
||||
|
||||
session.OverlordClient.SyncSend(cws.WSPacket{
|
||||
s.OverlordClient.SyncSend(cws.WSPacket{
|
||||
ID: "start",
|
||||
Data: gameName,
|
||||
TargetHostID: serverID,
|
||||
|
|
|
|||
|
|
@ -28,15 +28,8 @@ type Room struct {
|
|||
director *emulator.Director
|
||||
}
|
||||
|
||||
// generateRoomID generate a unique room ID containing 16 digits
|
||||
func generateRoomID() string {
|
||||
roomID := strconv.FormatInt(rand.Int63(), 16)
|
||||
//roomID := uuid.Must(uuid.NewV4()).String()
|
||||
return roomID
|
||||
}
|
||||
|
||||
// init initilizes a room returns roomID
|
||||
func (h *Handler) initRoom(roomID, gameName string) *Room {
|
||||
func NewRoom(roomID, gameName string) *Room {
|
||||
// if no roomID is given, generate it
|
||||
if roomID == "" {
|
||||
roomID = generateRoomID()
|
||||
|
|
@ -68,6 +61,13 @@ func (h *Handler) initRoom(roomID, gameName string) *Room {
|
|||
return room
|
||||
}
|
||||
|
||||
// generateRoomID generate a unique room ID containing 16 digits
|
||||
func generateRoomID() string {
|
||||
roomID := strconv.FormatInt(rand.Int63(), 16)
|
||||
//roomID := uuid.Must(uuid.NewV4()).String()
|
||||
return roomID
|
||||
}
|
||||
|
||||
// isRoomRunning check if there is any running sessions.
|
||||
// TODO: If we remove sessions from room anytime a session is closed, we can check if the sessions list is empty or not.
|
||||
func (h *Handler) isRoomRunning(roomID string) bool {
|
||||
|
|
|
|||
|
|
@ -21,58 +21,3 @@ type Session struct {
|
|||
RoomID string
|
||||
PlayerIndex int
|
||||
}
|
||||
|
||||
// getRoom returns room from roomID
|
||||
func (h *Handler) getRoom(roomID string) *Room {
|
||||
room, ok := h.rooms[roomID]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
return room
|
||||
}
|
||||
|
||||
// createNewRoom creates a new room
|
||||
// Return nil in case of room is existed
|
||||
func (h *Handler) createNewRoom(gameName string, roomID string, playerIndex int) *Room {
|
||||
//cleanSession(peerconnection)
|
||||
// If the roomID is empty,
|
||||
// or the roomID doesn't have any running sessions (room was closed)
|
||||
// we spawn a new room
|
||||
if roomID == "" || !h.isRoomRunning(roomID) {
|
||||
room := h.initRoom(roomID, gameName)
|
||||
h.rooms[roomID] = room
|
||||
return room
|
||||
}
|
||||
|
||||
// TODO: Might have race condition
|
||||
//rooms[roomID].rtcSessions = append(rooms[roomID].rtcSessions, peerconnection)
|
||||
//room := rooms[roomID]
|
||||
|
||||
//peerconnection.AttachRoomID(roomID)
|
||||
//go startWebRTCSession(room, peerconnection, playerIndex)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// startPeerConnection handles one peerconnection call
|
||||
//func (s *Handler) startPeerConnection( gameName string, roomID string, playerIndex int) (rRoomID string, isNewRoom bool) {
|
||||
//isNewRoom = false
|
||||
//cleanSession(peerconnection)
|
||||
//// If the roomID is empty,
|
||||
//// or the roomID doesn't have any running sessions (room was closed)
|
||||
//// we spawn a new room
|
||||
//if roomID == "" || !isRoomRunning(roomID) {
|
||||
//roomID = initRoom(roomID, gameName)
|
||||
//isNewRoom = true
|
||||
//}
|
||||
|
||||
//// TODO: Might have race condition
|
||||
//rooms[roomID].rtcSessions = append(rooms[roomID].rtcSessions, peerconnection)
|
||||
//room := rooms[roomID]
|
||||
|
||||
//peerconnection.AttachRoomID(roomID)
|
||||
//go startWebRTCSession(room, peerconnection, playerIndex)
|
||||
|
||||
//return roomID, isNewRoom
|
||||
//}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue