aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-01-21 18:27:13 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-01-21 18:27:13 +0200
commitde5315c050369dd7d2cc7cdc2b82e9cde0d6da24 (patch)
tree2cf2436f58182e3841471880cee90b0993c9e033 /Software/Visual_Studio
parente1506d483f8f7beadb1367d6a00acfb4754183fc (diff)
downloadTango-de5315c050369dd7d2cc7cdc2b82e9cde0d6da24.tar.gz
Tango-de5315c050369dd7d2cc7cdc2b82e9cde0d6da24.zip
Testing some external bridge communication..
Implemented external bridge application logs routing !!!
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs8
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs1
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs35
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs97
-rw-r--r--Software/Visual_Studio/Tango.Logging/ExceptionLogItem.cs1
-rw-r--r--Software/Visual_Studio/Tango.Logging/LogItemBase.cs39
-rw-r--r--Software/Visual_Studio/Tango.Logging/LogManager.cs9
-rw-r--r--Software/Visual_Studio/Tango.Logging/MessageLogItem.cs1
-rw-r--r--Software/Visual_Studio/Tango.PMR/Common/MessageType.cs125
-rw-r--r--Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsRequest.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsResponse.cs160
-rw-r--r--Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsRequest.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsResponse.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj6
-rw-r--r--Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Transport/Discovery/UdpDiscoveryService.cs1
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransporterBase.cs9
19 files changed, 824 insertions, 67 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml
index 2e2dd1285..c323ce0b0 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml
@@ -99,6 +99,8 @@
<ToggleButton IsChecked="{Binding UseKeepAlive}" HorizontalAlignment="Left"></ToggleButton>
<TextBlock FontWeight="SemiBold" Text="Enable Events:" />
<ToggleButton IsChecked="{Binding EnableEventsNotification}" HorizontalAlignment="Left"></ToggleButton>
+ <TextBlock FontWeight="SemiBold" Text="Enable Application Logs:" />
+ <ToggleButton IsChecked="{Binding EnableApplicationLogs}" HorizontalAlignment="Left"></ToggleButton>
</controls:TableGrid>
</DataTemplate>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
index 7c6287933..2a0392dd6 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
@@ -132,6 +132,8 @@ namespace Tango.PPC.Common.Connection
await MachineOperator.Connect();
+ await Task.Delay(1000);
+ await MachineOperator.UploadHardwareConfiguration(Machine.Configuration.HardwareVersion, Machine.Configuration);
}
else
{
@@ -142,6 +144,9 @@ namespace Tango.PPC.Common.Connection
MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp;
MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator));
await MachineOperator.Connect();
+
+ await Task.Delay(1000);
+ await MachineOperator.UploadHardwareConfiguration(Machine.Configuration.HardwareVersion, Machine.Configuration);
}
}
else
@@ -162,6 +167,9 @@ namespace Tango.PPC.Common.Connection
LogManager.Log("Connecting machine operator...");
MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator));
await MachineOperator.Connect();
+
+ await Task.Delay(1000);
+ await MachineOperator.UploadHardwareConfiguration(Machine.Configuration.HardwareVersion, Machine.Configuration);
}
}
catch (Exception ex)
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index d72e75011..efc5f8179 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+ <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
index eb00a27b3..388e42eed 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
@@ -134,6 +134,7 @@ namespace Tango.Integration.ExternalBridge
while (IsStarted)
{
var ClientEp = new IPEndPoint(IPAddress.Any, 0);
+ _server.EnableBroadcast = true;
var ClientRequestData = _server.Receive(ref ClientEp);
ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData);
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
index 19e0b2910..2a18aff57 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
@@ -24,6 +24,8 @@ namespace Tango.Integration.ExternalBridge
{
private UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket> _discoverySevice;
private TcpServer _tcpServer;
+ private bool _send_app_logs;
+ private String _app_logs_token;
#region Events
@@ -116,6 +118,8 @@ namespace Tango.Integration.ExternalBridge
{
_tcpServer = new TcpServer(1984);
_tcpServer.ClientConnected += _tcpServer_ClientConnected;
+
+ LogManager.NewLog += LogManager_NewLog;
}
/// <summary>
@@ -129,7 +133,6 @@ namespace Tango.Integration.ExternalBridge
MachineOperator = machineOperator;
}
-
#endregion
#region Properties Changes
@@ -189,6 +192,21 @@ namespace Tango.Integration.ExternalBridge
//Do nothing right now.
}
+ private void LogManager_NewLog(object sender, Tango.Logging.LogItemBase e)
+ {
+ if (State == TransportComponentState.Connected && _send_app_logs)
+ {
+ try
+ {
+ SendResponse<StartApplicationLogsResponse>(new StartApplicationLogsResponse()
+ {
+ LogItem = ByteString.CopyFrom(e.Serialize())
+ }, _app_logs_token);
+ }
+ catch { }
+ }
+ }
+
#endregion
#region Public Methods
@@ -264,6 +282,18 @@ namespace Tango.Integration.ExternalBridge
{
OnExternalBridgeLogoutRequest(container);
}
+ else if (container.Type == MessageType.StartApplicationLogsRequest)
+ {
+ _app_logs_token = container.Token;
+ _send_app_logs = true;
+ SendResponse<StartApplicationLogsResponse>(new StartApplicationLogsResponse(), container.Token);
+ }
+ else if (container.Type == MessageType.StopApplicationLogsRequest)
+ {
+ _send_app_logs = false;
+ SendResponse<StopApplicationLogsResponse>(new StopApplicationLogsResponse() { }, container.Token);
+ SendResponse<StartApplicationLogsResponse>(new StartApplicationLogsResponse() { }, _app_logs_token, true);
+ }
else
{
if (IsInSession && SessionIntent == ExternalBridgeLoginIntent.Override)
@@ -281,6 +311,8 @@ namespace Tango.Integration.ExternalBridge
public async override Task Disconnect()
{
+ _send_app_logs = false;
+
try
{
if (IsInSession)
@@ -307,6 +339,7 @@ namespace Tango.Integration.ExternalBridge
protected async virtual void OnClientDisconnected()
{
IsInSession = false;
+ _send_app_logs = false;
if (MachineOperator.State == TransportComponentState.Connected)
{
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs
index d602ac781..52c8be462 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeTcpClient.cs
@@ -1,12 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reactive.Concurrency;
+using System.Reactive.Linq;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Integration.Operation;
+using Tango.Logging;
+using Tango.PMR;
using Tango.PMR.Common;
using Tango.PMR.Connection;
using Tango.PMR.Integration;
@@ -24,6 +28,8 @@ namespace Tango.Integration.ExternalBridge
/// <seealso cref="Tango.Integration.ExternalBridge.IExternalBridgeSecureClient" />
public class ExternalBridgeTcpClient : MachineOperator, IExternalBridgeSecureClient
{
+ private bool _logs_sent;
+
#region Properties
private String _serialNumber;
@@ -50,6 +56,21 @@ namespace Tango.Integration.ExternalBridge
set { _ipAddress = value; RaisePropertyChangedAuto(); }
}
+ private bool _enableApplicationLogs;
+ /// <summary>
+ /// Gets or sets a value indicating whether to enable receiving application logs.
+ /// </summary>
+ public bool EnableApplicationLogs
+ {
+ get { return _enableApplicationLogs; }
+ set
+ {
+ _enableApplicationLogs = value;
+ RaisePropertyChangedAuto();
+ OnEnableApplicationLogsChanged(value);
+ }
+ }
+
/// <summary>
/// Gets a value indicating whether this client requires authentication.
/// </summary>
@@ -110,6 +131,82 @@ namespace Tango.Integration.ExternalBridge
OnEnableDiagnosticsChanged(EnableDiagnostics);
OnEnableEmbeddedDebuggingChanged(EnableEmbeddedDebugging);
OnEnableEventsNotification(EnableEventsNotification);
+ OnEnableApplicationLogsChanged(EnableApplicationLogs);
+ }
+ }
+
+ private async void OnEnableApplicationLogsChanged(bool value)
+ {
+ if (value && State == TransportComponentState.Connected && !_logs_sent)
+ {
+ var request = new StartApplicationLogsRequest();
+
+ bool responseLogged = false;
+ _logs_sent = true;
+
+ SendContinuousRequest<StartApplicationLogsRequest, StartApplicationLogsResponse>(request).ObserveOn(new NewThreadScheduler())
+ .Subscribe
+ (
+ (response) =>
+ {
+ if (!responseLogged)
+ {
+ LogResponseReceived(response.Message);
+ responseLogged = true;
+ }
+
+ OnApplicationLogAvailable(response);
+ },
+ (ex) =>
+ {
+ _logs_sent = false;
+
+ if (!(ex is ContinuousResponseAbortedException))
+ {
+ LogRequestFailed(request, ex);
+ }
+ },
+ () =>
+ {
+ _logs_sent = false;
+ });
+
+ LogRequestSent(request);
+ }
+ else if (_logs_sent)
+ {
+ _logs_sent = false;
+
+ if (State == TransportComponentState.Connected)
+ {
+ var req = new StopApplicationLogsRequest();
+
+ try
+ {
+ LogRequestSent(req);
+ var res = await SendRequest<StopApplicationLogsRequest, StopApplicationLogsResponse>(req);
+ LogResponseReceived(res.Message);
+ }
+ catch (Exception ex)
+ {
+ LogRequestFailed(req, ex);
+ }
+ }
+ }
+ }
+
+ private void OnApplicationLogAvailable(TangoMessage<StartApplicationLogsResponse> response)
+ {
+ try
+ {
+ if (response.Message.LogItem.Count() > 0)
+ {
+ LogManager.Log(LogItemBase.Deserialize(response.Message.LogItem.ToArray()));
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error deserializing incoming application log item!");
}
}
diff --git a/Software/Visual_Studio/Tango.Logging/ExceptionLogItem.cs b/Software/Visual_Studio/Tango.Logging/ExceptionLogItem.cs
index d2a1a352d..7c325ee19 100644
--- a/Software/Visual_Studio/Tango.Logging/ExceptionLogItem.cs
+++ b/Software/Visual_Studio/Tango.Logging/ExceptionLogItem.cs
@@ -10,6 +10,7 @@ namespace Tango.Logging
/// <summary>
/// Represents an exception log item.
/// </summary>
+ [Serializable]
public class ExceptionLogItem : LogItemBase
{
/// <summary>
diff --git a/Software/Visual_Studio/Tango.Logging/LogItemBase.cs b/Software/Visual_Studio/Tango.Logging/LogItemBase.cs
index b914a33ef..f89b73b40 100644
--- a/Software/Visual_Studio/Tango.Logging/LogItemBase.cs
+++ b/Software/Visual_Studio/Tango.Logging/LogItemBase.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
@@ -11,14 +12,21 @@ namespace Tango.Logging
/// <summary>
/// Represents a base class for log items.
/// </summary>
+ [Serializable]
public abstract class LogItemBase : INotifyPropertyChanged
{
private static String base_path;
+ [NonSerialized]
+ private Object _logObject;
/// <summary>
/// Gets or sets an optional log object.
/// </summary>
- public Object LogObject { get; set; }
+ public Object LogObject
+ {
+ get { return _logObject; }
+ set { _logObject = value; }
+ }
/// <summary>
/// Gets or sets the caller method adding the exception.
@@ -87,6 +95,35 @@ namespace Tango.Logging
}
/// <summary>
+ /// Serializes this log item using <see cref="BinaryFormatter"/>.
+ /// </summary>
+ /// <returns></returns>
+ public byte[] Serialize()
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ BinaryFormatter f = new BinaryFormatter();
+ f.Serialize(ms, this);
+ return ms.ToArray();
+ }
+ }
+
+ /// <summary>
+ /// Deserializes the specified data using <see cref="BinaryFormatter"/> to create a log item.
+ /// </summary>
+ /// <param name="data">The data.</param>
+ /// <returns></returns>
+ public static LogItemBase Deserialize(byte[] data)
+ {
+ using (MemoryStream ms = new MemoryStream(data))
+ {
+ ms.Position = 0;
+ BinaryFormatter f = new BinaryFormatter();
+ return f.Deserialize(ms) as LogItemBase;
+ }
+ }
+
+ /// <summary>
/// Raises the property changed event.
/// </summary>
/// <param name="propName">Name of the property.</param>
diff --git a/Software/Visual_Studio/Tango.Logging/LogManager.cs b/Software/Visual_Studio/Tango.Logging/LogManager.cs
index 04c66a71f..98bcaaa28 100644
--- a/Software/Visual_Studio/Tango.Logging/LogManager.cs
+++ b/Software/Visual_Studio/Tango.Logging/LogManager.cs
@@ -190,6 +190,15 @@ namespace Tango.Logging
}
/// <summary>
+ /// Appends the specified log item.
+ /// </summary>
+ /// <param name="logItem">The log item.</param>
+ public void Log(LogItemBase logItem)
+ {
+ AppendLog(logItem);
+ }
+
+ /// <summary>
/// Logs the current referenced assemblies in the app domain.
/// </summary>
public void LogReferencedAssemblies()
diff --git a/Software/Visual_Studio/Tango.Logging/MessageLogItem.cs b/Software/Visual_Studio/Tango.Logging/MessageLogItem.cs
index f45aa8cea..b0b3e24ae 100644
--- a/Software/Visual_Studio/Tango.Logging/MessageLogItem.cs
+++ b/Software/Visual_Studio/Tango.Logging/MessageLogItem.cs
@@ -10,6 +10,7 @@ namespace Tango.Logging
/// <summary>
/// Represents an exception log item.
/// </summary>
+ [Serializable]
public class MessageLogItem : LogItemBase
{
private String _message;
diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
index fea3f95a9..b378f1ca5 100644
--- a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
@@ -22,7 +22,7 @@ namespace Tango.PMR.Common {
static MessageTypeReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqWLQoLTWVz",
+ "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqeLgoLTWVz",
"c2FnZVR5cGUSCAoETm9uZRAAEhEKDUVycm9yUmVzcG9uc2UQARIUChBDYWxj",
"dWxhdGVSZXF1ZXN0EAMSFQoRQ2FsY3VsYXRlUmVzcG9uc2UQBBITCg9Qcm9n",
"cmVzc1JlcXVlc3QQBRIUChBQcm9ncmVzc1Jlc3BvbnNlEAYSHAoYU3R1YkNh",
@@ -95,64 +95,67 @@ namespace Tango.PMR.Common {
"ZXF1ZXN0EOsHEiEKHEV4dGVybmFsQnJpZGdlTG9nb3V0UmVzcG9uc2UQ7AcS",
"IQocRGlyZWN0U3luY2hyb25pemF0aW9uUmVxdWVzdBDtBxIiCh1EaXJlY3RT",
"eW5jaHJvbml6YXRpb25SZXNwb25zZRDuBxIcChdPdmVycmlkZURhdGFCYXNl",
- "UmVxdWVzdBDvBxIdChhPdmVycmlkZURhdGFCYXNlUmVzcG9uc2UQ8AcSHAoX",
- "U3RhcnREaWFnbm9zdGljc1JlcXVlc3QQ0A8SHQoYU3RhcnREaWFnbm9zdGlj",
- "c1Jlc3BvbnNlENEPEhwKF01vdG9yQWJvcnRIb21pbmdSZXF1ZXN0ENIPEh0K",
- "GE1vdG9yQWJvcnRIb21pbmdSZXNwb25zZRDTDxIXChJNb3RvckhvbWluZ1Jl",
- "cXVlc3QQ1A8SGAoTTW90b3JIb21pbmdSZXNwb25zZRDVDxIYChNNb3Rvckpv",
- "Z2dpbmdSZXF1ZXN0ENYPEhkKFE1vdG9ySm9nZ2luZ1Jlc3BvbnNlENcPEh0K",
- "GE1vdG9yQWJvcnRKb2dnaW5nUmVxdWVzdBDYDxIeChlNb3RvckFib3J0Sm9n",
- "Z2luZ1Jlc3BvbnNlENkPEiAKG0Rpc3BlbnNlckFib3J0SG9taW5nUmVxdWVz",
- "dBDaDxIhChxEaXNwZW5zZXJBYm9ydEhvbWluZ1Jlc3BvbnNlENsPEhsKFkRp",
- "c3BlbnNlckhvbWluZ1JlcXVlc3QQ3A8SHAoXRGlzcGVuc2VySG9taW5nUmVz",
- "cG9uc2UQ3Q8SHAoXRGlzcGVuc2VySm9nZ2luZ1JlcXVlc3QQ3g8SHQoYRGlz",
- "cGVuc2VySm9nZ2luZ1Jlc3BvbnNlEN8PEiEKHERpc3BlbnNlckFib3J0Sm9n",
- "Z2luZ1JlcXVlc3QQ4A8SIgodRGlzcGVuc2VyQWJvcnRKb2dnaW5nUmVzcG9u",
- "c2UQ4Q8SGQoUU2V0RGlnaXRhbE91dFJlcXVlc3QQ4g8SGgoVU2V0RGlnaXRh",
- "bE91dFJlc3BvbnNlEOMPEhkKFFRocmVhZEpvZ2dpbmdSZXF1ZXN0EOQPEhoK",
- "FVRocmVhZEpvZ2dpbmdSZXNwb25zZRDlDxIeChlUaHJlYWRBYm9ydEpvZ2dp",
- "bmdSZXF1ZXN0EOYPEh8KGlRocmVhZEFib3J0Sm9nZ2luZ1Jlc3BvbnNlEOcP",
- "Eh0KGFNldENvbXBvbmVudFZhbHVlUmVxdWVzdBDoDxIeChlTZXRDb21wb25l",
- "bnRWYWx1ZVJlc3BvbnNlEOkPEhgKE1Jlc29sdmVFdmVudFJlcXVlc3QQ6g8S",
- "GQoUUmVzb2x2ZUV2ZW50UmVzcG9uc2UQ6w8SGwoWU3RvcERpYWdub3N0aWNz",
- "UmVxdWVzdBDsDxIcChdTdG9wRGlhZ25vc3RpY3NSZXNwb25zZRDtDxIjCh5T",
- "dGFydEV2ZW50c05vdGlmaWNhdGlvblJlcXVlc3QQ7g8SJAofU3RhcnRFdmVu",
- "dHNOb3RpZmljYXRpb25SZXNwb25zZRDvDxIiCh1TdG9wRXZlbnRzTm90aWZp",
- "Y2F0aW9uUmVxdWVzdBDwDxIjCh5TdG9wRXZlbnRzTm90aWZpY2F0aW9uUmVz",
- "cG9uc2UQ8Q8SGgoVU2V0SGVhdGVyU3RhdGVSZXF1ZXN0EPIPEhsKFlNldEhl",
- "YXRlclN0YXRlUmVzcG9uc2UQ8w8SGgoVU2V0Qmxvd2VyU3RhdGVSZXF1ZXN0",
- "EPQPEhsKFlNldEJsb3dlclN0YXRlUmVzcG9uc2UQ9Q8SGQoUU2V0VmFsdmVT",
- "dGF0ZVJlcXVlc3QQ9g8SGgoVU2V0VmFsdmVTdGF0ZVJlc3BvbnNlEPcPEg8K",
- "CkpvYlJlcXVlc3QQuBcSEAoLSm9iUmVzcG9uc2UQuRcSFAoPQWJvcnRKb2JS",
- "ZXF1ZXN0ELoXEhUKEEFib3J0Sm9iUmVzcG9uc2UQuxcSIwoeVXBsb2FkUHJv",
- "Y2Vzc1BhcmFtZXRlcnNSZXF1ZXN0ELwXEiQKH1VwbG9hZFByb2Nlc3NQYXJh",
- "bWV0ZXJzUmVzcG9uc2UQvRcSFgoRQ3VycmVudEpvYlJlcXVlc3QQvhcSFwoS",
- "Q3VycmVudEpvYlJlc3BvbnNlEL8XEhwKF1Jlc3VtZUN1cnJlbnRKb2JSZXF1",
- "ZXN0EMAXEh0KGFJlc3VtZUN1cnJlbnRKb2JSZXNwb25zZRDBFxIZChRTdGFy",
- "dERlYnVnTG9nUmVxdWVzdBCgHxIaChVTdGFydERlYnVnTG9nUmVzcG9uc2UQ",
- "oR8SGAoTU3RvcERlYnVnTG9nUmVxdWVzdBCiHxIZChRTdG9wRGVidWdMb2dS",
- "ZXNwb25zZRCjHxInCiJVcGxvYWRIYXJkd2FyZUNvbmZpZ3VyYXRpb25SZXF1",
- "ZXN0EIgnEigKI1VwbG9hZEhhcmR3YXJlQ29uZmlndXJhdGlvblJlc3BvbnNl",
- "EIknEhcKElN5c3RlbVJlc2V0UmVxdWVzdBCKJxIYChNTeXN0ZW1SZXNldFJl",
- "c3BvbnNlEIsnEhUKEEtlZXBBbGl2ZVJlcXVlc3QQ8C4SFgoRS2VlcEFsaXZl",
- "UmVzcG9uc2UQ8S4SEwoOQ29ubmVjdFJlcXVlc3QQ8i4SFAoPQ29ubmVjdFJl",
- "c3BvbnNlEPMuEhYKEURpc2Nvbm5lY3RSZXF1ZXN0EPQuEhcKEkRpc2Nvbm5l",
- "Y3RSZXNwb25zZRD1LhIWChFGaWxlVXBsb2FkUmVxdWVzdBDYNhIXChJGaWxl",
- "VXBsb2FkUmVzcG9uc2UQ2TYSGwoWRmlsZUNodW5rVXBsb2FkUmVxdWVzdBDa",
- "NhIcChdGaWxlQ2h1bmtVcGxvYWRSZXNwb25zZRDbNhIaChVFeGVjdXRlUHJv",
- "Y2Vzc1JlcXVlc3QQ3DYSGwoWRXhlY3V0ZVByb2Nlc3NSZXNwb25zZRDdNhIX",
- "ChJLaWxsUHJvY2Vzc1JlcXVlc3QQ3jYSGAoTS2lsbFByb2Nlc3NSZXNwb25z",
- "ZRDfNhISCg1DcmVhdGVSZXF1ZXN0EOA2EhMKDkNyZWF0ZVJlc3BvbnNlEOE2",
- "EhIKDURlbGV0ZVJlcXVlc3QQ4jYSEwoORGVsZXRlUmVzcG9uc2UQ4zYSGgoV",
- "R2V0U3RvcmFnZUluZm9SZXF1ZXN0EOQ2EhsKFkdldFN0b3JhZ2VJbmZvUmVz",
- "cG9uc2UQ5TYSFAoPR2V0RmlsZXNSZXF1ZXN0EOY2EhUKEEdldEZpbGVzUmVz",
- "cG9uc2UQ5zYSGAoTRmlsZURvd25sb2FkUmVxdWVzdBDoNhIZChRGaWxlRG93",
- "bmxvYWRSZXNwb25zZRDpNhIdChhGaWxlQ2h1bmtEb3dubG9hZFJlcXVlc3QQ",
- "6jYSHgoZRmlsZUNodW5rRG93bmxvYWRSZXNwb25zZRDrNhIbChZWYWxpZGF0",
- "ZVZlcnNpb25SZXF1ZXN0EOw2EhwKF1ZhbGlkYXRlVmVyc2lvblJlc3BvbnNl",
- "EO02EhsKFkFjdGl2YXRlVmVyc2lvblJlcXVlc3QQ7jYSHAoXQWN0aXZhdGVW",
- "ZXJzaW9uUmVzcG9uc2UQ7zZCHAoaY29tLnR3aW5lLnRhbmdvLnBtci5jb21t",
- "b25iBnByb3RvMw=="));
+ "UmVxdWVzdBDvBxIdChhPdmVycmlkZURhdGFCYXNlUmVzcG9uc2UQ8AcSIAob",
+ "U3RhcnRBcHBsaWNhdGlvbkxvZ3NSZXF1ZXN0EPEHEiEKHFN0YXJ0QXBwbGlj",
+ "YXRpb25Mb2dzUmVzcG9uc2UQ8gcSHwoaU3RvcEFwcGxpY2F0aW9uTG9nc1Jl",
+ "cXVlc3QQ8wcSIAobU3RvcEFwcGxpY2F0aW9uTG9nc1Jlc3BvbnNlEPQHEhwK",
+ "F1N0YXJ0RGlhZ25vc3RpY3NSZXF1ZXN0ENAPEh0KGFN0YXJ0RGlhZ25vc3Rp",
+ "Y3NSZXNwb25zZRDRDxIcChdNb3RvckFib3J0SG9taW5nUmVxdWVzdBDSDxId",
+ "ChhNb3RvckFib3J0SG9taW5nUmVzcG9uc2UQ0w8SFwoSTW90b3JIb21pbmdS",
+ "ZXF1ZXN0ENQPEhgKE01vdG9ySG9taW5nUmVzcG9uc2UQ1Q8SGAoTTW90b3JK",
+ "b2dnaW5nUmVxdWVzdBDWDxIZChRNb3RvckpvZ2dpbmdSZXNwb25zZRDXDxId",
+ "ChhNb3RvckFib3J0Sm9nZ2luZ1JlcXVlc3QQ2A8SHgoZTW90b3JBYm9ydEpv",
+ "Z2dpbmdSZXNwb25zZRDZDxIgChtEaXNwZW5zZXJBYm9ydEhvbWluZ1JlcXVl",
+ "c3QQ2g8SIQocRGlzcGVuc2VyQWJvcnRIb21pbmdSZXNwb25zZRDbDxIbChZE",
+ "aXNwZW5zZXJIb21pbmdSZXF1ZXN0ENwPEhwKF0Rpc3BlbnNlckhvbWluZ1Jl",
+ "c3BvbnNlEN0PEhwKF0Rpc3BlbnNlckpvZ2dpbmdSZXF1ZXN0EN4PEh0KGERp",
+ "c3BlbnNlckpvZ2dpbmdSZXNwb25zZRDfDxIhChxEaXNwZW5zZXJBYm9ydEpv",
+ "Z2dpbmdSZXF1ZXN0EOAPEiIKHURpc3BlbnNlckFib3J0Sm9nZ2luZ1Jlc3Bv",
+ "bnNlEOEPEhkKFFNldERpZ2l0YWxPdXRSZXF1ZXN0EOIPEhoKFVNldERpZ2l0",
+ "YWxPdXRSZXNwb25zZRDjDxIZChRUaHJlYWRKb2dnaW5nUmVxdWVzdBDkDxIa",
+ "ChVUaHJlYWRKb2dnaW5nUmVzcG9uc2UQ5Q8SHgoZVGhyZWFkQWJvcnRKb2dn",
+ "aW5nUmVxdWVzdBDmDxIfChpUaHJlYWRBYm9ydEpvZ2dpbmdSZXNwb25zZRDn",
+ "DxIdChhTZXRDb21wb25lbnRWYWx1ZVJlcXVlc3QQ6A8SHgoZU2V0Q29tcG9u",
+ "ZW50VmFsdWVSZXNwb25zZRDpDxIYChNSZXNvbHZlRXZlbnRSZXF1ZXN0EOoP",
+ "EhkKFFJlc29sdmVFdmVudFJlc3BvbnNlEOsPEhsKFlN0b3BEaWFnbm9zdGlj",
+ "c1JlcXVlc3QQ7A8SHAoXU3RvcERpYWdub3N0aWNzUmVzcG9uc2UQ7Q8SIwoe",
+ "U3RhcnRFdmVudHNOb3RpZmljYXRpb25SZXF1ZXN0EO4PEiQKH1N0YXJ0RXZl",
+ "bnRzTm90aWZpY2F0aW9uUmVzcG9uc2UQ7w8SIgodU3RvcEV2ZW50c05vdGlm",
+ "aWNhdGlvblJlcXVlc3QQ8A8SIwoeU3RvcEV2ZW50c05vdGlmaWNhdGlvblJl",
+ "c3BvbnNlEPEPEhoKFVNldEhlYXRlclN0YXRlUmVxdWVzdBDyDxIbChZTZXRI",
+ "ZWF0ZXJTdGF0ZVJlc3BvbnNlEPMPEhoKFVNldEJsb3dlclN0YXRlUmVxdWVz",
+ "dBD0DxIbChZTZXRCbG93ZXJTdGF0ZVJlc3BvbnNlEPUPEhkKFFNldFZhbHZl",
+ "U3RhdGVSZXF1ZXN0EPYPEhoKFVNldFZhbHZlU3RhdGVSZXNwb25zZRD3DxIP",
+ "CgpKb2JSZXF1ZXN0ELgXEhAKC0pvYlJlc3BvbnNlELkXEhQKD0Fib3J0Sm9i",
+ "UmVxdWVzdBC6FxIVChBBYm9ydEpvYlJlc3BvbnNlELsXEiMKHlVwbG9hZFBy",
+ "b2Nlc3NQYXJhbWV0ZXJzUmVxdWVzdBC8FxIkCh9VcGxvYWRQcm9jZXNzUGFy",
+ "YW1ldGVyc1Jlc3BvbnNlEL0XEhYKEUN1cnJlbnRKb2JSZXF1ZXN0EL4XEhcK",
+ "EkN1cnJlbnRKb2JSZXNwb25zZRC/FxIcChdSZXN1bWVDdXJyZW50Sm9iUmVx",
+ "dWVzdBDAFxIdChhSZXN1bWVDdXJyZW50Sm9iUmVzcG9uc2UQwRcSGQoUU3Rh",
+ "cnREZWJ1Z0xvZ1JlcXVlc3QQoB8SGgoVU3RhcnREZWJ1Z0xvZ1Jlc3BvbnNl",
+ "EKEfEhgKE1N0b3BEZWJ1Z0xvZ1JlcXVlc3QQoh8SGQoUU3RvcERlYnVnTG9n",
+ "UmVzcG9uc2UQox8SJwoiVXBsb2FkSGFyZHdhcmVDb25maWd1cmF0aW9uUmVx",
+ "dWVzdBCIJxIoCiNVcGxvYWRIYXJkd2FyZUNvbmZpZ3VyYXRpb25SZXNwb25z",
+ "ZRCJJxIXChJTeXN0ZW1SZXNldFJlcXVlc3QQiicSGAoTU3lzdGVtUmVzZXRS",
+ "ZXNwb25zZRCLJxIVChBLZWVwQWxpdmVSZXF1ZXN0EPAuEhYKEUtlZXBBbGl2",
+ "ZVJlc3BvbnNlEPEuEhMKDkNvbm5lY3RSZXF1ZXN0EPIuEhQKD0Nvbm5lY3RS",
+ "ZXNwb25zZRDzLhIWChFEaXNjb25uZWN0UmVxdWVzdBD0LhIXChJEaXNjb25u",
+ "ZWN0UmVzcG9uc2UQ9S4SFgoRRmlsZVVwbG9hZFJlcXVlc3QQ2DYSFwoSRmls",
+ "ZVVwbG9hZFJlc3BvbnNlENk2EhsKFkZpbGVDaHVua1VwbG9hZFJlcXVlc3QQ",
+ "2jYSHAoXRmlsZUNodW5rVXBsb2FkUmVzcG9uc2UQ2zYSGgoVRXhlY3V0ZVBy",
+ "b2Nlc3NSZXF1ZXN0ENw2EhsKFkV4ZWN1dGVQcm9jZXNzUmVzcG9uc2UQ3TYS",
+ "FwoSS2lsbFByb2Nlc3NSZXF1ZXN0EN42EhgKE0tpbGxQcm9jZXNzUmVzcG9u",
+ "c2UQ3zYSEgoNQ3JlYXRlUmVxdWVzdBDgNhITCg5DcmVhdGVSZXNwb25zZRDh",
+ "NhISCg1EZWxldGVSZXF1ZXN0EOI2EhMKDkRlbGV0ZVJlc3BvbnNlEOM2EhoK",
+ "FUdldFN0b3JhZ2VJbmZvUmVxdWVzdBDkNhIbChZHZXRTdG9yYWdlSW5mb1Jl",
+ "c3BvbnNlEOU2EhQKD0dldEZpbGVzUmVxdWVzdBDmNhIVChBHZXRGaWxlc1Jl",
+ "c3BvbnNlEOc2EhgKE0ZpbGVEb3dubG9hZFJlcXVlc3QQ6DYSGQoURmlsZURv",
+ "d25sb2FkUmVzcG9uc2UQ6TYSHQoYRmlsZUNodW5rRG93bmxvYWRSZXF1ZXN0",
+ "EOo2Eh4KGUZpbGVDaHVua0Rvd25sb2FkUmVzcG9uc2UQ6zYSGwoWVmFsaWRh",
+ "dGVWZXJzaW9uUmVxdWVzdBDsNhIcChdWYWxpZGF0ZVZlcnNpb25SZXNwb25z",
+ "ZRDtNhIbChZBY3RpdmF0ZVZlcnNpb25SZXF1ZXN0EO42EhwKF0FjdGl2YXRl",
+ "VmVyc2lvblJlc3BvbnNlEO82QhwKGmNvbS50d2luZS50YW5nby5wbXIuY29t",
+ "bW9uYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Common.MessageType), }, null));
@@ -290,6 +293,10 @@ namespace Tango.PMR.Common {
[pbr::OriginalName("DirectSynchronizationResponse")] DirectSynchronizationResponse = 1006,
[pbr::OriginalName("OverrideDataBaseRequest")] OverrideDataBaseRequest = 1007,
[pbr::OriginalName("OverrideDataBaseResponse")] OverrideDataBaseResponse = 1008,
+ [pbr::OriginalName("StartApplicationLogsRequest")] StartApplicationLogsRequest = 1009,
+ [pbr::OriginalName("StartApplicationLogsResponse")] StartApplicationLogsResponse = 1010,
+ [pbr::OriginalName("StopApplicationLogsRequest")] StopApplicationLogsRequest = 1011,
+ [pbr::OriginalName("StopApplicationLogsResponse")] StopApplicationLogsResponse = 1012,
/// <summary>
///Diagnostics
/// </summary>
diff --git a/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsRequest.cs b/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsRequest.cs
new file mode 100644
index 000000000..d30ced5cb
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsRequest.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartApplicationLogsRequest.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Integration {
+
+ /// <summary>Holder for reflection information generated from StartApplicationLogsRequest.proto</summary>
+ public static partial class StartApplicationLogsRequestReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartApplicationLogsRequest.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartApplicationLogsRequestReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiFTdGFydEFwcGxpY2F0aW9uTG9nc1JlcXVlc3QucHJvdG8SFVRhbmdvLlBN",
+ "Ui5JbnRlZ3JhdGlvbiIdChtTdGFydEFwcGxpY2F0aW9uTG9nc1JlcXVlc3RC",
+ "IQofY29tLnR3aW5lLnRhbmdvLnBtci5pbnRlZ3JhdGlvbmIGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.StartApplicationLogsRequest), global::Tango.PMR.Integration.StartApplicationLogsRequest.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartApplicationLogsRequest : pb::IMessage<StartApplicationLogsRequest> {
+ private static readonly pb::MessageParser<StartApplicationLogsRequest> _parser = new pb::MessageParser<StartApplicationLogsRequest>(() => new StartApplicationLogsRequest());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartApplicationLogsRequest> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Integration.StartApplicationLogsRequestReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsRequest(StartApplicationLogsRequest other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsRequest Clone() {
+ return new StartApplicationLogsRequest(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StartApplicationLogsRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartApplicationLogsRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StartApplicationLogsRequest other) {
+ if (other == null) {
+ return;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsResponse.cs b/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsResponse.cs
new file mode 100644
index 000000000..bcc02bcd0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Integration/StartApplicationLogsResponse.cs
@@ -0,0 +1,160 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartApplicationLogsResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Integration {
+
+ /// <summary>Holder for reflection information generated from StartApplicationLogsResponse.proto</summary>
+ public static partial class StartApplicationLogsResponseReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartApplicationLogsResponse.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartApplicationLogsResponseReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiJTdGFydEFwcGxpY2F0aW9uTG9nc1Jlc3BvbnNlLnByb3RvEhVUYW5nby5Q",
+ "TVIuSW50ZWdyYXRpb24iLwocU3RhcnRBcHBsaWNhdGlvbkxvZ3NSZXNwb25z",
+ "ZRIPCgdMb2dJdGVtGAEgASgMQiEKH2NvbS50d2luZS50YW5nby5wbXIuaW50",
+ "ZWdyYXRpb25iBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.StartApplicationLogsResponse), global::Tango.PMR.Integration.StartApplicationLogsResponse.Parser, new[]{ "LogItem" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartApplicationLogsResponse : pb::IMessage<StartApplicationLogsResponse> {
+ private static readonly pb::MessageParser<StartApplicationLogsResponse> _parser = new pb::MessageParser<StartApplicationLogsResponse>(() => new StartApplicationLogsResponse());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartApplicationLogsResponse> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Integration.StartApplicationLogsResponseReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsResponse(StartApplicationLogsResponse other) : this() {
+ logItem_ = other.logItem_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartApplicationLogsResponse Clone() {
+ return new StartApplicationLogsResponse(this);
+ }
+
+ /// <summary>Field number for the "LogItem" field.</summary>
+ public const int LogItemFieldNumber = 1;
+ private pb::ByteString logItem_ = pb::ByteString.Empty;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pb::ByteString LogItem {
+ get { return logItem_; }
+ set {
+ logItem_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StartApplicationLogsResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartApplicationLogsResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (LogItem != other.LogItem) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (LogItem.Length != 0) hash ^= LogItem.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (LogItem.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteBytes(LogItem);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (LogItem.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeBytesSize(LogItem);
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StartApplicationLogsResponse other) {
+ if (other == null) {
+ return;
+ }
+ if (other.LogItem.Length != 0) {
+ LogItem = other.LogItem;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ LogItem = input.ReadBytes();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsRequest.cs b/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsRequest.cs
new file mode 100644
index 000000000..efd92751b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsRequest.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StopApplicationLogsRequest.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Integration {
+
+ /// <summary>Holder for reflection information generated from StopApplicationLogsRequest.proto</summary>
+ public static partial class StopApplicationLogsRequestReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StopApplicationLogsRequest.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StopApplicationLogsRequestReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiBTdG9wQXBwbGljYXRpb25Mb2dzUmVxdWVzdC5wcm90bxIVVGFuZ28uUE1S",
+ "LkludGVncmF0aW9uIhwKGlN0b3BBcHBsaWNhdGlvbkxvZ3NSZXF1ZXN0QiEK",
+ "H2NvbS50d2luZS50YW5nby5wbXIuaW50ZWdyYXRpb25iBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.StopApplicationLogsRequest), global::Tango.PMR.Integration.StopApplicationLogsRequest.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StopApplicationLogsRequest : pb::IMessage<StopApplicationLogsRequest> {
+ private static readonly pb::MessageParser<StopApplicationLogsRequest> _parser = new pb::MessageParser<StopApplicationLogsRequest>(() => new StopApplicationLogsRequest());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StopApplicationLogsRequest> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Integration.StopApplicationLogsRequestReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsRequest(StopApplicationLogsRequest other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsRequest Clone() {
+ return new StopApplicationLogsRequest(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StopApplicationLogsRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StopApplicationLogsRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StopApplicationLogsRequest other) {
+ if (other == null) {
+ return;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsResponse.cs b/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsResponse.cs
new file mode 100644
index 000000000..f8316f423
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Integration/StopApplicationLogsResponse.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StopApplicationLogsResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Integration {
+
+ /// <summary>Holder for reflection information generated from StopApplicationLogsResponse.proto</summary>
+ public static partial class StopApplicationLogsResponseReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StopApplicationLogsResponse.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StopApplicationLogsResponseReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiFTdG9wQXBwbGljYXRpb25Mb2dzUmVzcG9uc2UucHJvdG8SFVRhbmdvLlBN",
+ "Ui5JbnRlZ3JhdGlvbiIdChtTdG9wQXBwbGljYXRpb25Mb2dzUmVzcG9uc2VC",
+ "IQofY29tLnR3aW5lLnRhbmdvLnBtci5pbnRlZ3JhdGlvbmIGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.StopApplicationLogsResponse), global::Tango.PMR.Integration.StopApplicationLogsResponse.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StopApplicationLogsResponse : pb::IMessage<StopApplicationLogsResponse> {
+ private static readonly pb::MessageParser<StopApplicationLogsResponse> _parser = new pb::MessageParser<StopApplicationLogsResponse>(() => new StopApplicationLogsResponse());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StopApplicationLogsResponse> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Integration.StopApplicationLogsResponseReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsResponse(StopApplicationLogsResponse other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StopApplicationLogsResponse Clone() {
+ return new StopApplicationLogsResponse(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StopApplicationLogsResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StopApplicationLogsResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StopApplicationLogsResponse other) {
+ if (other == null) {
+ return;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
index 20e2b0228..6556208c1 100644
--- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
+++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
@@ -179,6 +179,10 @@
<Compile Include="Integration\ExternalBridgeUdpDiscoveryPacket.cs" />
<Compile Include="Integration\OverrideDataBaseRequest.cs" />
<Compile Include="Integration\OverrideDataBaseResponse.cs" />
+ <Compile Include="Integration\StartApplicationLogsRequest.cs" />
+ <Compile Include="Integration\StartApplicationLogsResponse.cs" />
+ <Compile Include="Integration\StopApplicationLogsRequest.cs" />
+ <Compile Include="Integration\StopApplicationLogsResponse.cs" />
<Compile Include="IO\CreateRequest.cs" />
<Compile Include="IO\CreateResponse.cs" />
<Compile Include="IO\DeleteRequest.cs" />
@@ -253,7 +257,7 @@
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj b/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
index 338b5b069..4efa0e255 100644
--- a/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
+++ b/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
@@ -63,7 +63,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Transport/Discovery/UdpDiscoveryService.cs b/Software/Visual_Studio/Tango.Transport/Discovery/UdpDiscoveryService.cs
index 76773a817..97736e7fb 100644
--- a/Software/Visual_Studio/Tango.Transport/Discovery/UdpDiscoveryService.cs
+++ b/Software/Visual_Studio/Tango.Transport/Discovery/UdpDiscoveryService.cs
@@ -109,6 +109,7 @@ namespace Tango.Transport.Discovery
byte[] bytes = CurrentDiscoveryMessage.ToByteArray();
+ client.EnableBroadcast = true;
client.Send(bytes, bytes.Length, endPoint);
client.Close();
diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
index 58005a1e8..318e52979 100644
--- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
@@ -315,9 +315,12 @@ namespace Tango.Transport
try
{
- _pullThread.Abort();
- _pushThread.Abort();
- _keepAliveThread.Abort();
+ if (_pullThread != null)
+ {
+ _pullThread.Abort();
+ _pushThread.Abort();
+ _keepAliveThread.Abort();
+ }
}
catch { }