using ChatRoomContract; using Microsoft.Extensions.DependencyInjection; using NLog; using SimpleRpc.Transports.Http.Client; using SimpleRpc.Serialization.Hyperion; using SimpleRpc.Transports; using System.Diagnostics; namespace Moderator; internal class Moderator { private readonly List FIRSTNAMES = new List { "John", "Peter", "Jack", "Steve" }; /// /// A set of surnames to choose from. /// private readonly List LASTNAMES = new List { "Johnson", "Peterson", "Jackson", "Steveson" }; /// /// Logger for this class. /// Logger log = LogManager.GetCurrentClassLogger(); /// /// Configures logging subsystem. /// private void ConfigureLogging() { var config = new NLog.Config.LoggingConfiguration(); var console = new NLog.Targets.ConsoleTarget("console") { Layout = @"${date:format=HH\:mm\:ss}|${level}| ${message} ${exception}" }; config.AddTarget(console); config.AddRuleForAllLevels(console); LogManager.Configuration = config; } private void RunConnection(IChatRoomService chatRoom) { var rnd = new Random(); var name = FIRSTNAMES[rnd.Next(FIRSTNAMES.Count)] + " " + LASTNAMES[rnd.Next(LASTNAMES.Count)]; int clientId = chatRoom.RegisterClient(name); log.Info($"Registered with client id {clientId}"); Console.Title = $"Moderator | {name} | {clientId}"; while (true) { var message = chatRoom.GetNewMessage(); if (message != null) { log.Info($"Checking message ({message.id}): {message.contents}"); } Thread.Sleep(1 * 1000); } } private void Run() { //configure logging ConfigureLogging(); //initialize random number generator var rnd = new Random(); while (true) { //connect to the server, get service client proxy var sc = new ServiceCollection(); sc .AddSimpleRpcClient( "chatRoomService", //must be same as on line 86 new HttpClientTransportOptions { Url = "http://127.0.0.1:5000/simplerpc", Serializer = "HyperionMessageSerializer" } ) .AddSimpleRpcHyperionSerializer(); sc.AddSimpleRpcProxy("chatRoomService"); //must be same as on line 77 var sp = sc.BuildServiceProvider(); var chatRoom = sp.GetService(); Debug.Assert(chatRoom != null); try { RunConnection(chatRoom); } catch (Exception e) { //log whatever exception to console log.Warn(e, "Unhandled exception caught. Will restart main loop."); //prevent console spamming Thread.Sleep(2000); } } } static void Main(string[] args) { var self = new Moderator(); self.Run(); } }