blob: 4a9408c1d3faf31693cb554ece3fe3d2f4ae0c3b (
plain)
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
|
using Google.Protobuf;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Transport.Servers;
using Tango.Logging;
using Tango.PMR;
using Tango.PMR.Common;
using Tango.PMR.Stubs;
using Tango.Core.Commands;
using Tango.Transport;
using Tango.PMR.Integration;
namespace Tango.Emulations.Emulators
{
/// <summary>
/// Represents a Tango machine emulator.
/// </summary>
/// <seealso cref="Tango.Emulations.EmulatorBase" />
public class MachineEmulator : EmulatorBase
{
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="MachineEmulator"/> class.
/// </summary>
public MachineEmulator() : base()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="MachineEmulator"/> class.
/// </summary>
/// <param name="transporter">The transporter.</param>
public MachineEmulator(ITransporter transporter) : base(transporter)
{
}
#endregion
#region Override Methods
/// <summary>
/// Called on new request message.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="container">The container.</param>
protected override void OnTransporterRequestReceived(object sender, MessageContainer container)
{
switch (container.Type)
{
case MessageType.CalculateRequest:
Task.Factory.StartNew(() =>
{
var request = MessageFactory.ExtractMessageFromContainer<CalculateRequest>(container);
var response = MessageFactory.CreateTangoMessage<CalculateResponse>(container.Token);
response.Message.Sum = request.A + request.B;
Transporter.SendResponse(response);
});
break;
case MessageType.ProgressRequest:
var r = MessageFactory.ExtractMessageFromContainer<ProgressRequest>(container);
Task.Factory.StartNew(() =>
{
for (int i = 0; i < r.Amount; i++)
{
Thread.Sleep(r.Delay * 10);
var res = MessageFactory.CreateTangoMessage<ProgressResponse>(container.Token);
res.Message.Progress = i;
if (i == r.Amount - 1) res.Container.Completed = true;
Transporter.SendResponse(res);
}
});
break;
case MessageType.DirectSynchronizationRequest:
Task.Factory.StartNew(() =>
{
var request = MessageFactory.ExtractMessageFromContainer<DirectSynchronizationRequest>(container);
var response = MessageFactory.CreateTangoMessage<DirectSynchronizationResponse>(container.Token);
response.Message.LocalDB = ByteString.CopyFrom(new byte[1024 * 1024 * 10]);
Transporter.SendResponse(response);
});
break;
}
}
#endregion
}
}
|