Example #1
0
 internal LahPlayer(LahGame game, int id)
 {
     Game           = game;
     Id             = id;
     _hand          = new HashList <WhiteCard>();
     _selectedCards = new HashList <WhiteCard>();
     _prevPlays     = new List <RoundPlay>();
 }
Example #2
0
 public LahServer(LahGame game)
 {
     _game = game;
     _ws   = new WebSocketServer("ws://0.0.0.0:3000");
 }
Example #3
0
        static void Main(string[] args)
        {
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = new List <JsonConverter>()
                {
                    new CardConverter()
                }
            };

            var decks = new List <Pack>();

            // Load the settings
            var settings = LahSettings.FromFile("settings.json");

            // Load all the decks
            foreach (var deckPath in Directory.EnumerateFiles("decks", "*.json", SearchOption.AllDirectories))
            {
                try
                {
                    var deck = JsonConvert.DeserializeObject <Pack>(File.ReadAllText(deckPath));
                    decks.Add(deck);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Failed to load deck '{deckPath}': {ex.Message}");
                }
            }

            _game = new LahGame(decks, settings);

            Console.WriteLine("\n========= GAME STARTING =========\n");
            Console.WriteLine($"Player limit: [{settings.MinPlayers}, {settings.MaxPlayers}]");
            Console.WriteLine($"Hand size: {settings.HandSize}");
            Console.WriteLine($"Perma-Czar: {settings.PermanentCzar}");
            Console.WriteLine($"Cards: {_game.BlackCardCount + _game.WhiteCardCount} ({_game.WhiteCardCount}x white, {_game.BlackCardCount}x black)");
            Console.WriteLine();
            Console.WriteLine($"Packs:\n{decks.Select(d => $"        [{d}]").Aggregate((c, n) => $"{c}\n{n}")}");
            Console.WriteLine("\n=================================\n");

            _game.GameStateChanged += OnGameStateChanged;
            _game.RoundStarted     += OnGameRoundStarted;
            _game.StageChanged     += OnGameStageChanged;
            _game.RoundEnded       += OnGameRoundEnded;

            var hostCfg = new HostConfiguration
            {
                RewriteLocalhost = true,
                UrlReservations  = new UrlReservations()
                {
                    CreateAutomatically = true
                }
            };

            using (var host = new NancyHost(new Uri(settings.Host), new LahBootstrapper(), hostCfg))
                using (var gameServer = new LahServer(_game))
                {
                    gameServer.Start();
                    host.Start();
                    Console.WriteLine($"Hosting on {settings.Host}");
                    Console.ReadLine();
                    Console.WriteLine("Stopping...");
                    gameServer.Stop();
                }
        }