-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathDemo2_2.pas
More file actions
109 lines (91 loc) · 3.57 KB
/
Demo2_2.pas
File metadata and controls
109 lines (91 loc) · 3.57 KB
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
103
104
105
106
107
108
109
unit Demo2_2;
interface
// suppose all objects are in different, independent files
type
// I know nothing about who need my mail addresses, I am independent source of mail addresses. I know only TMailSenderMessage
// You can change and test me independently
TMailAdresSourceA = class
private
fMessageHandle: THandle;
public
constructor Create;
destructor Destroy; override;
end;
TMailAdresSourceB = class
private
fMessageHandle: THandle;
public
constructor Create;
destructor Destroy; override;
end;
TMailAdresSourceC = class
private
fMessageHandle: THandle;
public
constructor Create;
destructor Destroy; override;
end;
implementation
uses MessageBus, Demo2_1;
constructor TMailAdresSourceA.Create;
begin
inherited;
fMessageHandle := TMessageBus.Default.Subscribe<TMailSenderMessage>(TMailSenderMessage.MB_MAILSENDER, // when I receive question about TMailSenderMessage.MB_MAILSENDER
procedure(const aData: TMailSenderMessage; aEnv: TMessageBus.TBusEnvir) // this is my answer
begin // set break here
// this is my email database:
if (aData.Filter = TMailSenderMessage.TMailSenderFilter.msfOne) then begin // I have only msfOne type mail addresses
if aData.SecondFilter('adresA_1@domain.pl') then // are you interested in this mail adres ?
aData.Add('MailUserA_1', 'adresA_1@domain.pl');
if aData.SecondFilter('adresA_2@domain.gb') then // are you interested in this mail adres ?
aData.Add('MailUserA_2', 'adresA_2@domain.gb');
end;
end
)
end;
destructor TMailAdresSourceA.Destroy;
begin
TMessageBus.Default.Unsubscribe(fMessageHandle);
inherited;
end;
constructor TMailAdresSourceB.Create;
begin
inherited;
fMessageHandle := TMessageBus.Default.Subscribe<TMailSenderMessage>(TMailSenderMessage.MB_MAILSENDER,
procedure(const aData: TMailSenderMessage; aEnv: TMessageBus.TBusEnvir)
begin // set break here
if (aData.Filter = TMailSenderMessage.TMailSenderFilter.msfTwo) then begin // I have only msfTwo type mail addresses
if aData.SecondFilter('adresB_1@domain.pl') then
aData.Add('MailUserB_1', 'adresB_1@domain.pl');
if aData.SecondFilter('adresB_2@domain.gb') then
aData.Add('MailUserB_2', 'adresB_2@domain.gb');
end;
end
)
end;
destructor TMailAdresSourceB.Destroy;
begin
TMessageBus.Default.Unsubscribe(fMessageHandle);
inherited;
end;
constructor TMailAdresSourceC.Create;
begin
inherited;
fMessageHandle := TMessageBus.Default.Subscribe<TMailSenderMessage>(TMailSenderMessage.MB_MAILSENDER,
procedure(const aData: TMailSenderMessage; aEnv: TMessageBus.TBusEnvir)
begin // set break here
if (aData.Filter = TMailSenderMessage.TMailSenderFilter.msfTwo) then begin // I have only msfTwo type mail addresses
if aData.SecondFilter('adresC_1@domain.pl') then
aData.Add('MailUserC_1', 'adresC_1@domain.pl');
if aData.SecondFilter('adresC_2@domain.gb') then
aData.Add('MailUserC_2', 'adresC_2@domain.gb');
end;
end
)
end;
destructor TMailAdresSourceC.Destroy;
begin
TMessageBus.Default.Unsubscribe(fMessageHandle);
inherited;
end;
end.