protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); FleckServer.StartBroadcast(); }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); FleckServer.StartBroadcast(); //FleckServer.StartEcho(); GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; }
static void Main() { HostFactory.Run(config => { config.SetDescription("JsonServices Sample Server"); config.SetServiceName(ServiceName); config.Service <JsonServer>(sc => { var logger = HostLogger.Get <Program>(); sc.ConstructUsing(() => { // websocket transport var server = new FleckServer(Url); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); var jsonServer = new JsonServer(server, provider, serializer, executor); // optional: set product name and version information jsonServer.ProductName = ServiceName; jsonServer.ProductVersion = "0.0.1-beta"; return(jsonServer); }); sc.WhenStarted(js => { logger.Info($"{js.ProductName} starts listening: {Url}"); js.Start(); }); sc.WhenStopped(js => { logger.Info($"{js.ProductName} is stopping..."); js.Dispose(); }); }); }); }
public static void Main(string[] args) { Console.WriteLine(@" _____ __ ________ __ "); Console.WriteLine(@" / ___// /_ ____ __________ / ____/ /_ ____ _/ /_"); Console.WriteLine(@" \__ \/ __ \/ __ `/ ___/ __ \/ / / __ \/ __ `/ __/"); Console.WriteLine(@" ___/ / / / / /_/ / / / /_/ / /___/ / / / /_/ / /_ "); Console.WriteLine(@"/____/_/ /_/\__,_/_/ / .___/\____/_/ /_/\__,_/\__/ "); Console.WriteLine(@" / _/ Sock Chat Server"); #if DEBUG Console.WriteLine(@"============================================ DEBUG =="); #endif string configFile = GetFlagArgument(args, @"--cfg") ?? CONFIG; // If the config file doesn't exist and we're using the default path, run the converter if (!File.Exists(configFile) && configFile == CONFIG) { ConvertConfiguration(); } using IConfig config = new StreamConfig(configFile); // Load database and data provider libraries ReflectionUtilities.LoadAssemblies(@"SharpChat.Database.*.dll"); ReflectionUtilities.LoadAssemblies(@"SharpChat.DataProvider.*.dll"); // Allow forcing a sqlite database through console flags string sqliteDbPath = GetFlagArgument(args, @"--dbpath"); string databaseBackendName; object databaseArgument; if (!string.IsNullOrEmpty(sqliteDbPath)) { Logger.Write($@"Forcing SQLite: {sqliteDbPath}"); databaseBackendName = @"sqlite"; databaseArgument = sqliteDbPath; } else { databaseBackendName = GetFlagArgument(args, @"--dbb") ?? config.ReadValue(@"db"); databaseArgument = config.ScopeTo($@"db:{databaseBackendName}"); } IDatabaseBackend databaseBackend = new ObjectConstructor <IDatabaseBackend, DatabaseBackendAttribute, NullDatabaseBackend>() .Construct(databaseBackendName, databaseArgument); using HttpClient httpClient = new HttpClient { DefaultUserAgent = @"SharpChat/1.0", }; string dataProviderName = GetFlagArgument(args, @"--dpn") ?? config.ReadValue(@"dp"); IDataProvider dataProvider = new ObjectConstructor <IDataProvider, DataProviderAttribute, NullDataProvider>() .Construct(dataProviderName, config.ScopeTo($@"dp:{dataProviderName}"), httpClient); string portArg = GetFlagArgument(args, @"--port") ?? config.ReadValue(@"chat:port"); if (string.IsNullOrEmpty(portArg) || !ushort.TryParse(portArg, out ushort port)) { port = DEFAULT_PORT; } using IServer wss = new FleckServer(new IPEndPoint(IPAddress.Any, port)); using ChatServer scs = new ChatServer(config, wss, dataProvider, databaseBackend); using ManualResetEvent mre = new ManualResetEvent(false); Console.CancelKeyPress += (s, e) => { e.Cancel = true; mre.Set(); }; mre.WaitOne(); if (dataProvider is IDisposable dpd) { dpd.Dispose(); } if (databaseBackend is IDisposable dbd) { dbd.Dispose(); } }