mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-23 01:57:22 +00:00
Setup overlord
This commit is contained in:
parent
869aff67c4
commit
8d33218b32
3 changed files with 68 additions and 37 deletions
68
main.go
68
main.go
|
|
@ -63,22 +63,31 @@ func main() {
|
|||
fmt.Println("Use debug version")
|
||||
}
|
||||
if len(os.Args) == 3 {
|
||||
if os.Args[3] == "overlord" {
|
||||
if os.Args[2] == "overlord" {
|
||||
IsOverlord = true
|
||||
}
|
||||
fmt.Println("Running as overlord ")
|
||||
}
|
||||
|
||||
rand.Seed(time.Now().UTC().UnixNano())
|
||||
fmt.Println("http://localhost:8000")
|
||||
rooms = map[string]*Room{}
|
||||
|
||||
// ignore origin
|
||||
upgrader.CheckOrigin = func(r *http.Request) bool { return true }
|
||||
http.HandleFunc("/ws", ws)
|
||||
|
||||
http.HandleFunc("/", getWeb)
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))
|
||||
http.ListenAndServe(":8000", nil)
|
||||
http.HandleFunc("/ws", ws)
|
||||
|
||||
if !IsOverlord {
|
||||
fmt.Println("http://localhost:8000")
|
||||
http.ListenAndServe(":8000", nil)
|
||||
} else {
|
||||
fmt.Println("http://localhost:9000")
|
||||
// Overlord expose one more path for handle overlord connections
|
||||
http.HandleFunc("/wso", wso)
|
||||
http.ListenAndServe(":9000", nil)
|
||||
}
|
||||
}
|
||||
|
||||
func getWeb(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
@ -155,7 +164,9 @@ func startSession(webRTC *webrtc.WebRTC, gameName string, roomID string, playerI
|
|||
return roomID
|
||||
}
|
||||
|
||||
func ws(w http.ResponseWriter, r *http.Request) {
|
||||
// If it's overlord, handle overlord connection (from host to overlord)
|
||||
func wso(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println("Connected")
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("[!] WS upgrade:", err)
|
||||
|
|
@ -163,6 +174,37 @@ func ws(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
defer c.Close()
|
||||
|
||||
client := NewClient(c, webrtc.NewWebRTC())
|
||||
|
||||
client.syncReceive("ping", func(req WSPacket) WSPacket {
|
||||
log.Println("received Ping, sending Pong")
|
||||
return WSPacket{
|
||||
ID: "pong",
|
||||
}
|
||||
})
|
||||
client.listen()
|
||||
}
|
||||
|
||||
const overlordHost = "ws://localhost:9000/wso"
|
||||
|
||||
func createOverlordClient() (*websocket.Conn, error) {
|
||||
c, _, err := websocket.DefaultDialer.Dial(overlordHost, nil)
|
||||
if err != nil {
|
||||
log.Fatal("dial:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
// Handle normal traffic (from browser to host)
|
||||
func ws(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("[!] WS upgrade:", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
var gameName string
|
||||
var roomID string
|
||||
var playerIndex int
|
||||
|
|
@ -244,6 +286,22 @@ func ws(w http.ResponseWriter, r *http.Request) {
|
|||
return res
|
||||
})
|
||||
|
||||
// Create connection to overlord
|
||||
if !IsOverlord {
|
||||
oc, err := createOverlordClient()
|
||||
if err != nil {
|
||||
log.Println("Cannot connect to overlord")
|
||||
}
|
||||
oclient := NewClient(oc, webrtc.NewWebRTC())
|
||||
oclient.syncSend(WSPacket{
|
||||
ID: "ping",
|
||||
},
|
||||
func(resp WSPacket) {
|
||||
log.Println("pong")
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
client.listen()
|
||||
}
|
||||
|
||||
|
|
|
|||
28
overlord.go
28
overlord.go
|
|
@ -1,28 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
const overlordHost = "http://localhost:9000"
|
||||
|
||||
type Overlord struct {
|
||||
ws websocket.Conn
|
||||
}
|
||||
|
||||
//func createOverlordClient() websocket.Conn {
|
||||
//signal.Notify(interrupt, os.Interrupt)
|
||||
|
||||
////u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo"}
|
||||
////log.Printf("connecting to %s", u.String())
|
||||
|
||||
//c, _, err := websocket.DefaultDialer.Dial(overlordHost, nil)
|
||||
//if err != nil {
|
||||
//log.Fatal("dial:", err)
|
||||
//}
|
||||
//overlord := &Overlord{
|
||||
//ws: c,
|
||||
//}
|
||||
|
||||
//return overlord
|
||||
//}
|
||||
9
ws.go
9
ws.go
|
|
@ -10,8 +10,8 @@ import (
|
|||
)
|
||||
|
||||
type Client struct {
|
||||
conn *websocket.Conn
|
||||
wsoverlord *websocket.Conn
|
||||
conn *websocket.Conn
|
||||
|
||||
peerconnection *webrtc.WebRTC
|
||||
|
||||
// sendCallback is callback based on packetID
|
||||
|
|
@ -35,7 +35,8 @@ func NewClient(conn *websocket.Conn, webrtc *webrtc.WebRTC) *Client {
|
|||
sendCallback := map[string]func(WSPacket){}
|
||||
recvCallback := map[string]func(WSPacket){}
|
||||
return &Client{
|
||||
conn: conn,
|
||||
conn: conn,
|
||||
|
||||
peerconnection: webrtc,
|
||||
sendCallback: sendCallback,
|
||||
recvCallback: recvCallback,
|
||||
|
|
@ -49,7 +50,7 @@ func (c *Client) syncSend(packet WSPacket, callback func(msg WSPacket)) {
|
|||
return
|
||||
}
|
||||
|
||||
c.conn.WriteMessage(0, data)
|
||||
c.conn.WriteMessage(websocket.TextMessage, data)
|
||||
c.sendCallback[packet.PacketID] = callback
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue