2024-08-03 11:05:14 -06:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2024-09-26 19:49:59 -06:00
|
|
|
"log"
|
|
|
|
"log/slog"
|
|
|
|
"net"
|
|
|
|
"sshpong/internal/lobby"
|
|
|
|
"sync"
|
2024-08-03 11:05:14 -06:00
|
|
|
)
|
|
|
|
|
2024-08-15 20:08:23 -06:00
|
|
|
var exit chan bool
|
2024-09-26 19:49:59 -06:00
|
|
|
var games sync.Map
|
2024-08-15 20:08:23 -06:00
|
|
|
|
2024-08-03 11:05:14 -06:00
|
|
|
func main() {
|
2024-09-26 19:49:59 -06:00
|
|
|
slog.SetLogLoggerLevel(slog.LevelDebug)
|
|
|
|
fmt.Println("Starting sshpong lobby...")
|
|
|
|
go LobbyListen()
|
|
|
|
fmt.Println("Lobby started")
|
2024-08-03 11:05:14 -06:00
|
|
|
|
2024-09-26 19:49:59 -06:00
|
|
|
// fmt.Println("Starting game listener...")
|
|
|
|
// go GamesListen()
|
|
|
|
// fmt.Println("Game listener started")
|
2024-08-14 23:33:05 -06:00
|
|
|
|
2024-08-15 20:08:23 -06:00
|
|
|
_ = <-exit
|
2024-08-03 11:05:14 -06:00
|
|
|
}
|
2024-09-26 19:49:59 -06:00
|
|
|
|
|
|
|
// Starts listening on port 12345 for TCP connections
|
|
|
|
// Also creates client pool and game connection singletons
|
|
|
|
func LobbyListen() {
|
|
|
|
|
|
|
|
listener, err := net.Listen("tcp", "127.0.0.1:12345")
|
|
|
|
if err != nil {
|
|
|
|
slog.Error("Error setting up listener for lobby. Exiting...")
|
|
|
|
}
|
|
|
|
|
|
|
|
defer listener.Close()
|
|
|
|
|
|
|
|
l := lobby.CreateLobby()
|
|
|
|
|
|
|
|
for {
|
|
|
|
conn, err := listener.Accept()
|
|
|
|
if err != nil {
|
|
|
|
log.Println(err)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
go l.HandleLobbyConnection(conn)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// func GamesListen() {
|
|
|
|
//
|
|
|
|
// slog.SetLogLoggerLevel(slog.LevelDebug)
|
|
|
|
// slog.Debug("Debug level logs are active")
|
|
|
|
//
|
|
|
|
// gameListener, err := net.Listen("tcp", "127.0.0.1:42069")
|
|
|
|
// if err != nil {
|
|
|
|
// log.Fatal(err)
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// for {
|
|
|
|
// defer gameListener.Close()
|
|
|
|
// conn, err := gameListener.Accept()
|
|
|
|
// if err != nil {
|
|
|
|
// log.Println(err)
|
|
|
|
// continue
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// slog.Debug("Received game connection")
|
|
|
|
//
|
|
|
|
// go func(conn net.Conn) {
|
|
|
|
// messageBytes := make([]byte, 126)
|
|
|
|
//
|
|
|
|
// n, err := conn.Read(messageBytes)
|
|
|
|
// if err != nil {
|
|
|
|
// log.Printf("Error reading game ID on connection %s", err)
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// gInfo := strings.SplitAfter(string(messageBytes[:n]), ":")
|
|
|
|
// if err != nil {
|
|
|
|
// log.Printf("Game id was not a string? %s", err)
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// slog.Debug("Game request data", slog.Any("game info", gInfo))
|
|
|
|
//
|
|
|
|
// game, ok := games.Load(gInfo[0])
|
|
|
|
// if !ok {
|
|
|
|
// games.Store(gInfo[0], GameClients{Client1: Client{
|
|
|
|
// Username: gInfo[1],
|
|
|
|
// Conn: conn,
|
|
|
|
// }, Client2: Client{}})
|
|
|
|
// } else {
|
|
|
|
// gameclients, _ := game.(GameClients)
|
|
|
|
// client2 := Client{
|
|
|
|
// Username: gInfo[1],
|
|
|
|
// Conn: conn,
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// games.Store(gInfo[0], GameClients{
|
|
|
|
// Client1: gameclients.Client1,
|
|
|
|
// Client2: client2})
|
|
|
|
//
|
|
|
|
// go pong.StartGame(gameclients.Client1.Conn, client2.Conn, gameclients.Client1.Username, client2.Username)
|
|
|
|
// }
|
|
|
|
// }(conn)
|
|
|
|
// }
|
|
|
|
// }
|