You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Program.cs 3.4 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Grpc.Core;
  2. using Protobuf;
  3. using System.Threading;
  4. using Timothy.FrameRateTask;
  5. using System;
  6. using System.Net.Http.Headers;
  7. using CommandLine;
  8. namespace Server
  9. {
  10. public class Program
  11. {
  12. static int Main(string[] args)
  13. {
  14. foreach (var arg in args)
  15. {
  16. Console.Write($"{arg} ");
  17. }
  18. Console.WriteLine();
  19. ArgumentOptions? options = null;
  20. _ = Parser.Default.ParseArguments<ArgumentOptions>(args).WithParsed(o => { options = o; });
  21. if (options == null)
  22. {
  23. Console.WriteLine("Argument parsing failed!");
  24. return 1;
  25. }
  26. Console.WriteLine("Server begins to run: " + options.ServerPort.ToString());
  27. if (options.Playback)
  28. {
  29. try
  30. {
  31. PlaybackServer? playbackServer = new(options);
  32. Grpc.Core.Server server = new Grpc.Core.Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) })
  33. {
  34. Services = { AvailableService.BindService(playbackServer) },
  35. Ports = { new ServerPort(options.ServerIP, options.ServerPort, ServerCredentials.Insecure) }
  36. };
  37. server.Start();
  38. Console.WriteLine("Server begins to listen!");
  39. playbackServer.WaitForGame();
  40. Console.WriteLine("Server end!");
  41. server.ShutdownAsync().Wait();
  42. Thread.Sleep(50);
  43. Console.WriteLine("");
  44. Console.WriteLine("=================== Final Score ====================");
  45. Console.WriteLine($"Studnet: {playbackServer.FinalScore[0]}");
  46. Console.WriteLine($"Tricker: {playbackServer.FinalScore[1]}");
  47. }
  48. catch (Exception ex)
  49. {
  50. Console.WriteLine(ex.ToString());
  51. }
  52. }
  53. else
  54. {
  55. try
  56. {
  57. GameServer? gameServer = new(options);
  58. Grpc.Core.Server server = new Grpc.Core.Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) })
  59. {
  60. Services = { AvailableService.BindService(gameServer) },
  61. Ports = { new ServerPort(options.ServerIP, options.ServerPort, ServerCredentials.Insecure) }
  62. };
  63. server.Start();
  64. Console.WriteLine("Server begins to listen!");
  65. gameServer.WaitForEnd();
  66. Console.WriteLine("Server end!");
  67. server.ShutdownAsync().Wait();
  68. Thread.Sleep(50);
  69. Console.WriteLine("");
  70. Console.WriteLine("=================== Final Score ====================");
  71. Console.WriteLine($"Studnet: {gameServer.GetScore()[0]}");
  72. Console.WriteLine($"Tricker: {gameServer.GetScore()[1]}");
  73. }
  74. catch (Exception ex)
  75. {
  76. Console.WriteLine(ex.ToString());
  77. }
  78. }
  79. return 0;
  80. }
  81. }
  82. }