mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-22 17:47:11 +00:00
Update test for reconnect with overlord
This commit is contained in:
parent
1331fb8363
commit
43d74ec49f
2 changed files with 76 additions and 62 deletions
110
cmd/main_test.go
110
cmd/main_test.go
|
|
@ -128,7 +128,7 @@ func initClient(t *testing.T, host string) (client *cws.Client) {
|
|||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Println("return offer", offer)
|
||||
log.Println("return offer")
|
||||
return cws.WSPacket{
|
||||
ID: "initwebrtc",
|
||||
Data: gamertc.Encode(offer),
|
||||
|
|
@ -340,66 +340,70 @@ func TestReconnectRoomNoOverlord(t *testing.T) {
|
|||
}
|
||||
|
||||
// This test currently doesn't work
|
||||
//func TestReconnectRoomWithOverlord(t *testing.T) {
|
||||
//o := initOverlord()
|
||||
//defer o.Close()
|
||||
func TestReconnectRoomWithOverlord(t *testing.T) {
|
||||
o := initOverlord()
|
||||
defer o.Close()
|
||||
|
||||
//oconn := connectTestOverlordServer(t, o.URL)
|
||||
//defer oconn.Close()
|
||||
//// Init slave server
|
||||
//s := initServer(t, oconn)
|
||||
oconn := connectTestOverlordServer(t, o.URL)
|
||||
// Init slave server
|
||||
s := initServer(t, oconn)
|
||||
|
||||
//client := initClient(t, s.URL)
|
||||
client := initClient(t, s.URL)
|
||||
|
||||
//fmt.Println("Sending start...")
|
||||
//roomID := make(chan string)
|
||||
//client.Send(cws.WSPacket{
|
||||
//ID: "start",
|
||||
//Data: "Contra.nes",
|
||||
//RoomID: "",
|
||||
//PlayerIndex: 1,
|
||||
//}, func(resp cws.WSPacket) {
|
||||
//fmt.Println("RoomID:", resp.RoomID)
|
||||
//roomID <- resp.RoomID
|
||||
//})
|
||||
fmt.Println("Sending start...")
|
||||
roomID := make(chan string)
|
||||
client.Send(cws.WSPacket{
|
||||
ID: "start",
|
||||
Data: "Contra.nes",
|
||||
RoomID: "",
|
||||
PlayerIndex: 1,
|
||||
}, func(resp cws.WSPacket) {
|
||||
fmt.Println("RoomID:", resp.RoomID)
|
||||
roomID <- resp.RoomID
|
||||
})
|
||||
|
||||
//saveRoomID := <-roomID
|
||||
//if saveRoomID == "" {
|
||||
//fmt.Println("RoomID should not be empty")
|
||||
//t.Fail()
|
||||
//}
|
||||
saveRoomID := <-roomID
|
||||
if saveRoomID == "" {
|
||||
fmt.Println("RoomID should not be empty")
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
//log.Println("Closing room and server")
|
||||
//client.Close()
|
||||
//s.Close()
|
||||
//// Close server and reconnect
|
||||
log.Println("Closing room and server")
|
||||
client.Close()
|
||||
s.Close()
|
||||
oconn.Close()
|
||||
|
||||
//log.Println("Server respawn")
|
||||
//// Init slave server
|
||||
//s = initServer(t, oconn)
|
||||
//defer s.Close()
|
||||
time.Sleep(time.Second)
|
||||
// Close server and reconnect
|
||||
|
||||
//client = initClient(t, s.URL)
|
||||
//defer client.Close()
|
||||
log.Println("Server respawn")
|
||||
// Init slave server again
|
||||
oconn = connectTestOverlordServer(t, o.URL)
|
||||
defer oconn.Close()
|
||||
s = initServer(t, oconn)
|
||||
defer s.Close()
|
||||
|
||||
//fmt.Println("Re-access room ", saveRoomID)
|
||||
//roomID = make(chan string)
|
||||
//client.Send(cws.WSPacket{
|
||||
//ID: "start",
|
||||
//Data: "Contra.nes",
|
||||
//RoomID: saveRoomID,
|
||||
//PlayerIndex: 1,
|
||||
//}, func(resp cws.WSPacket) {
|
||||
//fmt.Println("RoomID:", resp.RoomID)
|
||||
//roomID <- resp.RoomID
|
||||
//})
|
||||
client = initClient(t, s.URL)
|
||||
defer client.Close()
|
||||
|
||||
//respRoomID := <-roomID
|
||||
//if respRoomID == "" || respRoomID != saveRoomID {
|
||||
//fmt.Println("The room ID should be equal to the saved room")
|
||||
//t.Fail()
|
||||
//}
|
||||
fmt.Println("Re-access room ", saveRoomID)
|
||||
roomID = make(chan string)
|
||||
client.Send(cws.WSPacket{
|
||||
ID: "start",
|
||||
Data: "Contra.nes",
|
||||
RoomID: saveRoomID,
|
||||
PlayerIndex: 1,
|
||||
}, func(resp cws.WSPacket) {
|
||||
fmt.Println("RoomID:", resp.RoomID)
|
||||
roomID <- resp.RoomID
|
||||
})
|
||||
|
||||
//fmt.Println("Done")
|
||||
respRoomID := <-roomID
|
||||
if respRoomID == "" || respRoomID != saveRoomID {
|
||||
fmt.Println("The room ID should be equal to the saved room")
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
//}
|
||||
time.Sleep(time.Second)
|
||||
fmt.Println("Done")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@ var upgrader = websocket.Upgrader{}
|
|||
|
||||
func NewServer() *Server {
|
||||
return &Server{
|
||||
servers: map[string]*cws.Client{},
|
||||
// Mapping serverID to client
|
||||
servers: map[string]*cws.Client{},
|
||||
// Mapping roomID to server
|
||||
roomToServer: map[string]string{},
|
||||
}
|
||||
}
|
||||
|
|
@ -34,8 +36,6 @@ func (o *Server) WSO(w http.ResponseWriter, r *http.Request) {
|
|||
log.Print("Overlord: [!] WS upgrade:", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
// Register new server
|
||||
serverID := strconv.Itoa(rand.Int())
|
||||
log.Println("Overlord: A new server connected to Overlord", serverID)
|
||||
|
|
@ -43,12 +43,7 @@ func (o *Server) WSO(w http.ResponseWriter, r *http.Request) {
|
|||
// Register to servers map the client connection
|
||||
client := cws.NewClient(c)
|
||||
o.servers[serverID] = client
|
||||
|
||||
//wssession := &Session{
|
||||
//client: client,
|
||||
//peerconnection: webrtc.NewWebRTC(),
|
||||
//// The server session is maintaining
|
||||
//}
|
||||
defer o.cleanConnection(client, serverID)
|
||||
|
||||
// Sendback the ID to server
|
||||
client.Send(
|
||||
|
|
@ -72,6 +67,7 @@ func (o *Server) WSO(w http.ResponseWriter, r *http.Request) {
|
|||
// getRoom returns the server ID based on requested roomID.
|
||||
client.Receive("getRoom", func(resp cws.WSPacket) cws.WSPacket {
|
||||
log.Println("Overlord: Received a getroom request")
|
||||
log.Println("Result: ", o.roomToServer[resp.Data])
|
||||
return cws.WSPacket{
|
||||
ID: "getRoom",
|
||||
Data: o.roomToServer[resp.Data],
|
||||
|
|
@ -142,3 +138,17 @@ func (o *Server) WSO(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
client.Listen()
|
||||
}
|
||||
|
||||
func (o *Server) cleanConnection(client *cws.Client, serverID string) {
|
||||
log.Println("Unregister server from overlord")
|
||||
// Remove serverID from servers
|
||||
delete(o.servers, serverID)
|
||||
// Clean all rooms connecting to that server
|
||||
for roomID, roomServer := range o.roomToServer {
|
||||
if roomServer == serverID {
|
||||
delete(o.roomToServer, roomID)
|
||||
}
|
||||
}
|
||||
|
||||
client.Close()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue