forked from StockSharp/StockSharp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
IMessageChannel.cs
102 lines (85 loc) · 2.31 KB
/
IMessageChannel.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
#region S# License
/******************************************************************************************
NOTICE!!! This program and source code is owned and licensed by
StockSharp, LLC, www.stocksharp.com
Viewing or use of this code requires your acceptance of the license
agreement found at https://github.com/StockSharp/StockSharp/blob/master/LICENSE
Removal of this comment is a violation of the license agreement.
Project: StockSharp.Messages.Messages
File: IMessageChannel.cs
Created: 2015, 11, 11, 2:32 PM
Copyright 2010 by StockSharp, LLC
*******************************************************************************************/
#endregion S# License
namespace StockSharp.Messages
{
using System;
using Ecng.Common;
/// <summary>
/// Message channel base interface.
/// </summary>
public interface IMessageChannel : IDisposable, ICloneable<IMessageChannel>
{
/// <summary>
/// Is channel opened.
/// </summary>
bool IsOpened { get; }
/// <summary>
/// Open channel.
/// </summary>
void Open();
/// <summary>
/// Close channel.
/// </summary>
void Close();
/// <summary>
/// Send message.
/// </summary>
/// <param name="message">Message.</param>
void SendInMessage(Message message);
/// <summary>
/// New message event.
/// </summary>
event Action<Message> NewOutMessage;
}
/// <summary>
/// Message channel, which passes directly to the output all incoming messages.
/// </summary>
public class PassThroughMessageChannel : Cloneable<IMessageChannel>, IMessageChannel
{
/// <summary>
/// Initializes a new instance of the <see cref="PassThroughMessageChannel"/>.
/// </summary>
public PassThroughMessageChannel()
{
}
void IDisposable.Dispose()
{
}
bool IMessageChannel.IsOpened => true;
void IMessageChannel.Open()
{
}
void IMessageChannel.Close()
{
}
void IMessageChannel.SendInMessage(Message message)
{
_newMessage?.Invoke(message);
}
private Action<Message> _newMessage;
event Action<Message> IMessageChannel.NewOutMessage
{
add => _newMessage += value;
remove => _newMessage -= value;
}
/// <summary>
/// Create a copy of <see cref="PassThroughMessageChannel"/>.
/// </summary>
/// <returns>Copy.</returns>
public override IMessageChannel Clone()
{
return new PassThroughMessageChannel();
}
}
}