77 lines
2.4 KiB
C#
77 lines
2.4 KiB
C#
using bts.api.core;
|
|
|
|
using Bts.DataStream.Websocket;
|
|
|
|
using Google.Protobuf;
|
|
|
|
using System.CommandLine.Parsing;
|
|
using System.Text.Json;
|
|
|
|
static WebsocketServerConfig readConfigFile(string path) {
|
|
using var fs = File.OpenRead(path);
|
|
using var sr = new StreamReader(fs);
|
|
return JsonParser.Default.Parse<WebsocketServerConfig>(sr);
|
|
}
|
|
|
|
static WebsocketServerConfig? readConfigArg(ArgumentResult result) {
|
|
var path = result.Tokens.Select(t => t.Value).FirstOrDefault() ?? string.Empty;
|
|
return readConfigFile(path);
|
|
}
|
|
|
|
static WebsocketServerConfig getDefaultConfig() {
|
|
const string defaultCfgPath = "DataStreamWebsocketServer.conf";
|
|
if (File.Exists(defaultCfgPath)) {
|
|
return readConfigFile(defaultCfgPath);
|
|
}
|
|
return new() {
|
|
Scheme = "http",
|
|
Host = "localhost",
|
|
Port = 8080,
|
|
DefaultEndPoint = "/",
|
|
KeepAliveIntervalSecs = 1
|
|
};
|
|
}
|
|
|
|
static async Task run(
|
|
WebsocketServerConfig? wssConfig, string user, string password, string? sparkdConfigSource) {
|
|
var opts = new JsonSerializerOptions(JsonSerializerDefaults.Web);
|
|
wssConfig ??= getDefaultConfig();
|
|
Console.WriteLine("Starting DataStreamWebsocketServer...");
|
|
var serviceCtx = ServiceContext.create(sparkdConfigSource);
|
|
await serviceCtx.login(user, password);
|
|
await Session.Start(wssConfig, opts);
|
|
// if (sparkdConfigSource is not null && sparkdConfigSource.Length > 9999) {
|
|
// } else {
|
|
// await ChatGptSession.Start();
|
|
// }
|
|
}
|
|
|
|
var userOpt = new Option<string>("--user", () => "bts");
|
|
var passOpt = new Option<string>("--password", () => string.Empty);
|
|
var sparkdConfigSourceOpt = new Option<string>(
|
|
"--sparkd", description: "The sparkd config server url");
|
|
// var bling = new ParseArgument<WebsocketServerConfig?>(parseWsConfig);
|
|
|
|
// WebsocketServerConfig? parseWsConfig(ArgumentResult result) {
|
|
// Token t;
|
|
// TokenType tt;
|
|
// Symbol s;
|
|
// throw new NotImplementedException();
|
|
// }
|
|
|
|
var configOpt = new Option<WebsocketServerConfig?>(
|
|
"--config", readConfigArg, description: "WebsocketServerConfig file path");
|
|
configOpt.SetDefaultValue(new());
|
|
var rootCommand = new RootCommand("Starts a DataStream Websocket Server");
|
|
rootCommand.AddOption(configOpt);
|
|
rootCommand.AddOption(userOpt);
|
|
rootCommand.AddOption(passOpt);
|
|
rootCommand.SetHandler(run, configOpt, userOpt, passOpt, sparkdConfigSourceOpt);
|
|
|
|
try {
|
|
return await rootCommand.InvokeAsync(args);
|
|
} catch (Exception ex) {
|
|
Console.WriteLine($"Error: {ex}");
|
|
}
|
|
return 1;
|