diff --git a/main.go b/cmd/main.go similarity index 100% rename from main.go rename to cmd/main.go diff --git a/main_test.go b/cmd/main_test.go similarity index 100% rename from main_test.go rename to cmd/main_test.go diff --git a/overlord.go b/overlord.go deleted file mode 100644 index 4a9795f8..00000000 --- a/overlord.go +++ /dev/null @@ -1,123 +0,0 @@ -package main - -import ( - "fmt" - "log" - "math/rand" - "net/http" - "strconv" - - "github.com/giongto35/cloud-game/webrtc" -) - -var roomToServer = map[string]string{} - -// servers are the map serverID to server Client -var servers = map[string]*Client{} - -// 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) - return - } - defer c.Close() - - // register new server - serverID := strconv.Itoa(rand.Int()) - log.Println("A new server connected ", serverID) - - client := NewClient(c) - servers[serverID] = client - - wssession := &Session{ - client: client, - peerconnection: webrtc.NewWebRTC(), - // The server session is maintaining - } - - client.send( - WSPacket{ - ID: "serverID", - Data: serverID, - }, - nil, - ) - - client.receive("registerRoom", func(resp WSPacket) WSPacket { - log.Println("Received registerRoom ", resp.Data, serverID) - roomToServer[resp.Data] = serverID - return WSPacket{ - ID: "registerRoom", - } - }) - - client.receive("getRoom", func(resp WSPacket) WSPacket { - log.Println("Received a getroom request") - return WSPacket{ - ID: "getRoom", - Data: roomToServer[resp.Data], - } - }) - - client.receive("initwebrtc", func(resp WSPacket) WSPacket { - log.Println("Received a relay sdp request from a host") - // TODO: Abstract - if resp.TargetHostID != serverID { - log.Println("sending relay sdp to target host", resp) - // relay SDP to target host and get back sdp - // TODO: Async - sdp := servers[resp.TargetHostID].syncSend( - resp, - ) - - return sdp - } - log.Println("Target host is overlord itself: start peerconnection") - // If the target is in master - // start by its old - localSession, err := wssession.peerconnection.StartClient(resp.Data, width, height) - if err != nil { - log.Fatalln(err) - } - - return WSPacket{ - ID: "sdp", - Data: localSession, - } - }) - - // TODO: use relay ID type - // TODO: Merge sdp and start - client.receive("start", func(resp WSPacket) WSPacket { - log.Println("Received a relay start request from a host") - // TODO: Abstract - if resp.TargetHostID != serverID { - // relay SDP to target host and get back sdp - // TODO: Async - resp := servers[resp.TargetHostID].syncSend( - resp, - ) - - return resp - } - log.Println("Target host is overlord itself: start game") - // If the target is in master - // start by its old - roomID, isNewRoom := startSession(wssession.peerconnection, resp.Data, resp.RoomID, resp.PlayerIndex) - // Bridge always access to old room - // TODO: log warn - if isNewRoom == true { - log.Fatal("Bridge should not spawn new room") - } - - return WSPacket{ - ID: "start", - RoomID: roomID, - } - }) - - client.listen() -} diff --git a/overlord/overlord.go b/overlord/overlord.go index 8b137891..4a9795f8 100644 --- a/overlord/overlord.go +++ b/overlord/overlord.go @@ -1 +1,123 @@ +package main +import ( + "fmt" + "log" + "math/rand" + "net/http" + "strconv" + + "github.com/giongto35/cloud-game/webrtc" +) + +var roomToServer = map[string]string{} + +// servers are the map serverID to server Client +var servers = map[string]*Client{} + +// 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) + return + } + defer c.Close() + + // register new server + serverID := strconv.Itoa(rand.Int()) + log.Println("A new server connected ", serverID) + + client := NewClient(c) + servers[serverID] = client + + wssession := &Session{ + client: client, + peerconnection: webrtc.NewWebRTC(), + // The server session is maintaining + } + + client.send( + WSPacket{ + ID: "serverID", + Data: serverID, + }, + nil, + ) + + client.receive("registerRoom", func(resp WSPacket) WSPacket { + log.Println("Received registerRoom ", resp.Data, serverID) + roomToServer[resp.Data] = serverID + return WSPacket{ + ID: "registerRoom", + } + }) + + client.receive("getRoom", func(resp WSPacket) WSPacket { + log.Println("Received a getroom request") + return WSPacket{ + ID: "getRoom", + Data: roomToServer[resp.Data], + } + }) + + client.receive("initwebrtc", func(resp WSPacket) WSPacket { + log.Println("Received a relay sdp request from a host") + // TODO: Abstract + if resp.TargetHostID != serverID { + log.Println("sending relay sdp to target host", resp) + // relay SDP to target host and get back sdp + // TODO: Async + sdp := servers[resp.TargetHostID].syncSend( + resp, + ) + + return sdp + } + log.Println("Target host is overlord itself: start peerconnection") + // If the target is in master + // start by its old + localSession, err := wssession.peerconnection.StartClient(resp.Data, width, height) + if err != nil { + log.Fatalln(err) + } + + return WSPacket{ + ID: "sdp", + Data: localSession, + } + }) + + // TODO: use relay ID type + // TODO: Merge sdp and start + client.receive("start", func(resp WSPacket) WSPacket { + log.Println("Received a relay start request from a host") + // TODO: Abstract + if resp.TargetHostID != serverID { + // relay SDP to target host and get back sdp + // TODO: Async + resp := servers[resp.TargetHostID].syncSend( + resp, + ) + + return resp + } + log.Println("Target host is overlord itself: start game") + // If the target is in master + // start by its old + roomID, isNewRoom := startSession(wssession.peerconnection, resp.Data, resp.RoomID, resp.PlayerIndex) + // Bridge always access to old room + // TODO: log warn + if isNewRoom == true { + log.Fatal("Bridge should not spawn new room") + } + + return WSPacket{ + ID: "start", + RoomID: roomID, + } + }) + + client.listen() +} diff --git a/nes/apu.go b/ui/nes/apu.go similarity index 100% rename from nes/apu.go rename to ui/nes/apu.go diff --git a/nes/cartridge.go b/ui/nes/cartridge.go similarity index 100% rename from nes/cartridge.go rename to ui/nes/cartridge.go diff --git a/nes/console.go b/ui/nes/console.go similarity index 100% rename from nes/console.go rename to ui/nes/console.go diff --git a/nes/controller.go b/ui/nes/controller.go similarity index 100% rename from nes/controller.go rename to ui/nes/controller.go diff --git a/nes/cpu.go b/ui/nes/cpu.go similarity index 100% rename from nes/cpu.go rename to ui/nes/cpu.go diff --git a/nes/filter.go b/ui/nes/filter.go similarity index 100% rename from nes/filter.go rename to ui/nes/filter.go diff --git a/nes/ines.go b/ui/nes/ines.go similarity index 100% rename from nes/ines.go rename to ui/nes/ines.go diff --git a/nes/mapper.go b/ui/nes/mapper.go similarity index 100% rename from nes/mapper.go rename to ui/nes/mapper.go diff --git a/nes/mapper1.go b/ui/nes/mapper1.go similarity index 100% rename from nes/mapper1.go rename to ui/nes/mapper1.go diff --git a/nes/mapper2.go b/ui/nes/mapper2.go similarity index 100% rename from nes/mapper2.go rename to ui/nes/mapper2.go diff --git a/nes/mapper225.go b/ui/nes/mapper225.go similarity index 100% rename from nes/mapper225.go rename to ui/nes/mapper225.go diff --git a/nes/mapper3.go b/ui/nes/mapper3.go similarity index 100% rename from nes/mapper3.go rename to ui/nes/mapper3.go diff --git a/nes/mapper4.go b/ui/nes/mapper4.go similarity index 100% rename from nes/mapper4.go rename to ui/nes/mapper4.go diff --git a/nes/mapper7.go b/ui/nes/mapper7.go similarity index 100% rename from nes/mapper7.go rename to ui/nes/mapper7.go diff --git a/nes/memory.go b/ui/nes/memory.go similarity index 100% rename from nes/memory.go rename to ui/nes/memory.go diff --git a/nes/palette.go b/ui/nes/palette.go similarity index 100% rename from nes/palette.go rename to ui/nes/palette.go diff --git a/nes/ppu.go b/ui/nes/ppu.go similarity index 100% rename from nes/ppu.go rename to ui/nes/ppu.go diff --git a/ws.go b/ws/ws.go similarity index 100% rename from ws.go rename to ws/ws.go