コード例 #1
0
ファイル: Program.cs プロジェクト: Lailes/GameCentral
        static void Main(string[] args)
        {
            if (args.Length == 0 || !int.TryParse(args[0], out _))
            {
                return;
            }

            Console.WriteLine("GameCentral Database Kafka Service");
            Console.WriteLine("Port: " + args[0]);
            Console.WriteLine("Ctrl + C to exit");
            Console.WriteLine("=====================================");

            var source = new CancellationTokenSource();
            var token  = source.Token;

            Console.CancelKeyPress += delegate { source.Cancel(); };

            var options = new DbContextOptionsBuilder <GameCentralContext>();

            options.UseSqlServer(@"Server=localhost\SQLEXPRESS;Database=GameCentral;Trusted_Connection=True;Integrated Security=True");
            using var context = new GameCentralContext(options.Options);
            var repository = new EfGameCentralRepository(context);
        }
コード例 #2
0
        async Task Run()
        {
            Console.WriteLine("Writer service started:");

            var config = new ConsumerConfig {
                BootstrapServers = "localhost:9092",
                GroupId          = "GameWriter"
            };

            Consumer = new ConsumerBuilder <string, Game>(config).SetValueDeserializer(new GameDeserializer()).Build();
            Consumer.Subscribe(Topic);

            var contextOptionsBuilder = new DbContextOptionsBuilder <GameCentralContext>();

            contextOptionsBuilder.UseSqlite(SQLiteConnection);

            using var repository = new EfGameCentralRepository(new GameCentralContext(contextOptionsBuilder.Options));

            var tokenSource = new CancellationTokenSource();

            Console.CancelKeyPress += delegate { tokenSource.Cancel(); };
            var token = tokenSource.Token;

            while (!tokenSource.IsCancellationRequested)
            {
                var consumeResult = Consumer.Consume(token);
                Console.Write($"[Consume] Offset: {consumeResult.Offset}, Action: {consumeResult.Message.Key}, Id: {(consumeResult.Message.Value.GameId != null ? consumeResult.Message.Value.GameId.ToString() : "null")}");
                Console.WriteLine($", Title: {consumeResult.Message.Value.Title ?? "null"}");
                var message = consumeResult.Message;
                Thread.Sleep(10);
                switch (message.Key)
                {
                case "ADD": {
                    try {
                        await repository.AddGameAsync(message.Value);
                    }
                    catch (Exception e) {
                        Console.WriteLine(e.Message);
                    }
                    break;
                }

                case "EDIT": {
                    try {
                        await repository.EditGameAsync(message.Value);
                    }
                    catch (Exception e) {
                        Console.WriteLine(e.Message);
                    }
                    break;
                }

                case "DELETE": {
                    try {
                        await repository.RemoveGameAsync(message.Value.GameId ?? -1);
                    }
                    catch (Exception e) {
                        Console.WriteLine(e.Message);
                    }
                    break;
                }

                default: {
                    Thread.Sleep(10);
                    break;
                }
                }
            }


            Consumer.Dispose();
            Console.WriteLine("Finish");
        }