blob: a41501f7fbcbd55a581657b072c4d2c82107b026 (
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
|
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;
namespace Tango.Emulations.Emulators
{
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.ParseMessageFromContainer<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.ParseMessageFromContainer<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;
}
}
#endregion
}
}
|