|
@@ -1,4 +1,5 @@
|
|
|
using System;
|
|
|
+using System.Linq;
|
|
|
using H.Formatters;
|
|
|
using H.Pipes;
|
|
|
using InABox.Logikal;
|
|
@@ -12,6 +13,9 @@ namespace PRSLogikal
|
|
|
public LogikalServer Server { get; set; }
|
|
|
|
|
|
public event LogikalLogEvent Log;
|
|
|
+
|
|
|
+ private void DoLog(string message) => Log?.Invoke(this, new LogikalLogArguments(message));
|
|
|
+
|
|
|
|
|
|
public event EventHandler Disconnecting;
|
|
|
|
|
@@ -19,39 +23,45 @@ namespace PRSLogikal
|
|
|
{
|
|
|
_server = new PipeServer<LogikalMessage>("$logikal", formatter: new NewtonsoftJsonFormatter());
|
|
|
|
|
|
- _server.ClientConnected += async (o, args) =>
|
|
|
+ _server.ClientConnected += (o, args) =>
|
|
|
{
|
|
|
- Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} is now connected!"));
|
|
|
+ DoLog($@"Client {args.Connection.PipeName} is now connected!");
|
|
|
};
|
|
|
|
|
|
_server.ClientDisconnected += (o, args) =>
|
|
|
{
|
|
|
- Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} disconnected"));
|
|
|
+ DoLog($@"Client {args.Connection.PipeName} disconnected");
|
|
|
};
|
|
|
|
|
|
_server.MessageReceived += (sender, args) =>
|
|
|
{
|
|
|
- Log?.Invoke(this, new LogikalLogArguments($@"Client {args.Connection.PipeName} says: {args.Message.Method}: {args.Message.Payload}"));
|
|
|
+ DoLog($@"Client {args.Connection.PipeName} says: {args.Message.Method}: {args.Message.Payload}");
|
|
|
var _request = LogikalRequest.FromMessage(args.Message);
|
|
|
|
|
|
if (_request is LogikalConnectRequest _connectrequest)
|
|
|
Connect(_connectrequest);
|
|
|
- if (_request is LogikalLoginRequest _loginrequest)
|
|
|
+ else if (_request is LogikalLoginRequest _loginrequest)
|
|
|
Login(_loginrequest);
|
|
|
- if (_request is LogikalLogoutRequest _logoutrequest)
|
|
|
- Logout(_logoutrequest);
|
|
|
- if (_request is LogikalDisconnectRequest _disconnectrequest)
|
|
|
- Disconnect(_disconnectrequest);
|
|
|
+ else if (_request is LogikalProjectsRequest _projectsrequest)
|
|
|
+ ProjectList(_projectsrequest);
|
|
|
+ else if (_request is LogikalProjectRequest _projectrequest)
|
|
|
+ ProjectDetails(_projectrequest);
|
|
|
+ else if (_request is LogikalElevationRequest _elevationrequest)
|
|
|
+ ElevationDetails(_elevationrequest);
|
|
|
+ else if (_request is LogikalLogoutRequest)
|
|
|
+ Logout();
|
|
|
+ else if (_request is LogikalDisconnectRequest)
|
|
|
+ Disconnect();
|
|
|
|
|
|
};
|
|
|
|
|
|
_server.ExceptionOccurred += (sender, args) =>
|
|
|
{
|
|
|
- Log?.Invoke(this, new LogikalLogArguments($@"Exception: {args.Exception.Message}"));
|
|
|
+ DoLog($@"Exception: {args.Exception.Message}");
|
|
|
};
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public void Start() => _server.StartAsync();
|
|
|
|
|
|
public void Stop() => _server.StopAsync();
|
|
@@ -65,7 +75,7 @@ namespace PRSLogikal
|
|
|
_server.WriteAsync(_response.ToMessage());
|
|
|
}
|
|
|
|
|
|
- private void Disconnect(LogikalDisconnectRequest request)
|
|
|
+ private void Disconnect()
|
|
|
{
|
|
|
var _response = new LogikalDisconnectResponse()
|
|
|
{
|
|
@@ -85,7 +95,7 @@ namespace PRSLogikal
|
|
|
_server.WriteAsync(_response.ToMessage());
|
|
|
}
|
|
|
|
|
|
- private void Logout(LogikalLogoutRequest request)
|
|
|
+ private void Logout()
|
|
|
{
|
|
|
var _response = new LogikalLogoutResponse()
|
|
|
{
|
|
@@ -93,7 +103,69 @@ namespace PRSLogikal
|
|
|
};
|
|
|
_server.WriteAsync(_response.ToMessage());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ private void ProjectList(LogikalProjectsRequest request)
|
|
|
+ {
|
|
|
+ var _response = new LogikalProjectsResponse();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (Server.IsLoggedIn())
|
|
|
+ {
|
|
|
+ _response.Projects = Server.GetProjects().ToArray();
|
|
|
+ _response.Status = LogikalStatus.Ok;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _response.Status = LogikalStatus.Failed;
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ DoLog($"ProjectList: e.Message");
|
|
|
+ _response.Status = LogikalStatus.Error;
|
|
|
+ }
|
|
|
+ _server.WriteAsync(_response.ToMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ProjectDetails(LogikalProjectRequest request)
|
|
|
+ {
|
|
|
+ var _response = new LogikalProjectResponse();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (Server.IsLoggedIn())
|
|
|
+ {
|
|
|
+ _response.Project = Server.GetProject(request.ID);
|
|
|
+ _response.Status = LogikalStatus.Ok;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _response.Status = LogikalStatus.Failed;
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ DoLog($"ProjectList: e.Message");
|
|
|
+ _response.Status = LogikalStatus.Error;
|
|
|
+ }
|
|
|
+ _server.WriteAsync(_response.ToMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ElevationDetails(LogikalElevationRequest elevationdetailsrequest)
|
|
|
+ {
|
|
|
+ var _response = new LogikalElevationResponse();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (Server.IsLoggedIn())
|
|
|
+ {
|
|
|
+ _response.Elevation = Server.GetElevation(elevationdetailsrequest.ID);
|
|
|
+ _response.Status = LogikalStatus.Ok;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _response.Status = LogikalStatus.Failed;
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ _response.Status = LogikalStatus.Error;
|
|
|
+ }
|
|
|
+ _server.WriteAsync(_response.ToMessage());
|
|
|
+ }
|
|
|
+
|
|
|
public void Dispose()
|
|
|
{
|
|
|
if (_server != null)
|