Update test for reconnect with overlord

This commit is contained in:
giongto35 2019-05-12 15:09:39 +08:00
parent 1331fb8363
commit 43d74ec49f
2 changed files with 76 additions and 62 deletions

View file

@ -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")
}

View file

@ -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()
}