generated from ut-issl/repository-template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
App.cs
126 lines (114 loc) · 4 KB
/
App.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using Grpc.Net.Client;
using WINGS.GrpcService;
using WINGS_TMTC_IF.Services;
using WINGS_TMTC_IF.Models;
namespace WINGS_TMTC_IF
{
public class App
{
private readonly IConfiguration _configuration;
private readonly IOperationService _operationService;
private readonly IPortManager _portManager;
private readonly ITmPacketExtractor _tmPacketExtractor;
private readonly ITcPacketHandler _tcPacketHandler;
private readonly TmtcPacketService _tmtcPacketService;
public App(IConfiguration configuration,
IOperationService operationService,
IPortManager portManager,
ITmPacketExtractor tmPacketExtractor,
ITcPacketHandler tcPacketHandler,
TmtcPacketService tmtcPacketService)
{
_configuration = configuration;
_operationService = operationService;
_portManager = portManager;
_tmPacketExtractor = tmPacketExtractor;
_tcPacketHandler = tcPacketHandler;
_tmtcPacketService = tmtcPacketService;
}
public void Run()
{
// Select Opid
Task<List<Operation>> opTask= Task.Run(() => _operationService.FetchOperationAsync());
var opid = ConsoleSelectOperation(opTask.Result);
Console.WriteLine("Operation ID: {0}\n", opid);
// Initialize Port (Automatically open Serial or LAN port correspond to the selected component)
_portManager.Initialize();
// Initialize Packet Handler
_tmPacketExtractor.Initialize(opid);
_tcPacketHandler.Initialize(opid);
// Start gRPC Service
var client = ConfigureGrpcClient();
var tmTask = _tmtcPacketService.TmPacketSendLoop(client);
var tcTask = _tmtcPacketService.TcPacketReceiveLoop(client);
Task.WaitAll(tmTask, tcTask);
Console.ReadKey();
}
private string ConsoleSelectOperation(List<Operation> operations)
{
int num;
Console.WriteLine("Select operation and press enter");
for (int i = 0; i < operations.Count; i++)
{
var operation = operations[i];
Console.WriteLine("[ {0} ] : {1}", i, operation.PathNumber + " " + operation.Comment);
}
while (true)
{
try
{
num = int.Parse(Console.ReadLine());
var operation = operations[num];
if (num < operations.Count)
{
if (!operation.IsTmtcConnected)
{
return operation.Id;
}
else
{
Console.WriteLine("This operation is already connected by another client");
}
}
else
{
Console.WriteLine("Error unexpeced input");
}
}
catch
{
Console.WriteLine("Error unexpeced input");
}
}
}
private TmtcPacket.TmtcPacketClient ConfigureGrpcClient()
{
var env = _configuration["WINGS:Environment"];
var grpcConnectionString = _configuration["WINGS:GrpcConnectionString"];
GrpcChannel channel;
switch (env)
{
case "Windows": // Windows Development Build
case "Docker": // Linux on Docker Production Build
var httpHandler = new HttpClientHandler();
httpHandler.ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
channel = GrpcChannel.ForAddress(grpcConnectionString,
new GrpcChannelOptions { HttpHandler = httpHandler });
break;
case "Mac": // Mac Development Build
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
channel = GrpcChannel.ForAddress(grpcConnectionString);
break;
default:
throw new Exception("unsupported environment");
}
return new TmtcPacket.TmtcPacketClient(channel);
}
}
}