Skip to content

Commit 0358f75

Browse files
committed
Refactor of IEditableMessage to IMessageBuilder.
1 parent 236fddb commit 0358f75

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+891
-218
lines changed

Rnwood.Smtp4dev/API/DTO/Message.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using MimeKit;
2+
using Rnwood.Smtp4dev.Model;
23
using Rnwood.SmtpServer;
34
using System;
45
using System.Collections.Generic;
@@ -10,9 +11,9 @@ namespace Rnwood.Smtp4dev.Controllers.API.DTO
1011
{
1112
public class Message
1213
{
13-
private IMessage _message;
14+
private ISmtp4devMessage _message;
1415

15-
public Message(IMessage message)
16+
internal Message(ISmtp4devMessage message)
1617
{
1718
_message = message;
1819

@@ -37,5 +38,7 @@ public Message(IMessage message)
3738
public string[] To { get { return _message.To; } }
3839

3940
public string Subject { get; private set; }
41+
42+
public Guid Id { get { return _message.Id; } }
4043
}
4144
}

Rnwood.Smtp4dev/API/MessageController.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ namespace Rnwood.Smtp4dev.Controllers.API
1313
[Route("api/message")]
1414
public class MessagesController : Controller
1515
{
16-
private ISmtp4devServer _messageStore;
16+
private IMessageStore _messageStore;
1717

18-
public MessagesController(ISmtp4devServer messgeStore)
18+
public MessagesController(IMessageStore messageStore)
1919
{
20-
_messageStore = messgeStore;
20+
_messageStore = messageStore;
2121
}
2222

2323
// GET: api/values
@@ -26,11 +26,5 @@ public IEnumerable<Message> Get()
2626
{
2727
return _messageStore.Messages.Select(m => new Message(m));
2828
}
29-
30-
// DELETE api/values/5
31-
[HttpDelete("{id}")]
32-
public void Delete(Guid id)
33-
{
34-
}
3529
}
3630
}

Rnwood.Smtp4dev/API/MessagesHub.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ namespace Rnwood.Smtp4dev.API
99
{
1010
public class MessagesHub : Hub
1111
{
12-
public MessagesHub(ISmtp4devServer server)
12+
public MessagesHub(IMessageStore messageStore)
1313
{
14-
server.MessagesChanged += (s, ea) => { Refresh(); };
14+
messageStore.MessageAdded += (s, ea) => { MessageAdded(ea.Message); };
1515
}
1616

17-
public void Refresh()
17+
public void MessageAdded(ISmtp4devMessage message)
1818
{
19-
Clients.All.refresh();
19+
Clients.All.messageAdded(message.Id);
2020
}
2121
}
2222
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using Rnwood.SmtpServer;
2+
using System;
3+
using System.Collections.Generic;
4+
5+
namespace Rnwood.Smtp4dev.Model
6+
{
7+
public interface IMessageStore
8+
{
9+
IEnumerable<ISmtp4devMessage> Messages { get; }
10+
11+
event EventHandler<Smtp4devMessageEventArgs> MessageAdded;
12+
13+
void AddMessage(ISmtp4devMessage message);
14+
15+
ISmtp4devMessage CreateMessage(IConnection connection);
16+
}
17+
}

Rnwood.Smtp4dev/Model/ISmtp4devServer.cs renamed to Rnwood.Smtp4dev/Model/ISmtp4devEngine.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@
66

77
namespace Rnwood.Smtp4dev.Model
88
{
9-
public interface ISmtp4devServer
9+
public interface ISmtp4devEngine
1010
{
11-
event EventHandler<EventArgs> MessagesChanged;
12-
13-
IEnumerable<IMessage> Messages { get; }
14-
1511
void ApplySettings(Settings settings);
1612

1713
bool IsRunning { get; }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Rnwood.SmtpServer;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Threading.Tasks;
6+
7+
namespace Rnwood.Smtp4dev.Model
8+
{
9+
public interface ISmtp4devMessage : IMessage
10+
{
11+
Guid Id { get; }
12+
}
13+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using Rnwood.SmtpServer;
2+
using System;
3+
using System.Collections.Concurrent;
4+
using System.Collections.Generic;
5+
using System.Collections.ObjectModel;
6+
using System.IO;
7+
using System.Linq;
8+
using System.Threading.Tasks;
9+
10+
namespace Rnwood.Smtp4dev.Model
11+
{
12+
public class MessageStore : IMessageStore
13+
{
14+
public MessageStore(DirectoryInfo directory)
15+
{
16+
_directory = directory;
17+
18+
if (!_directory.Exists)
19+
{
20+
_directory.Create();
21+
}
22+
}
23+
24+
private DirectoryInfo _directory;
25+
26+
private ConcurrentQueue<ISmtp4devMessage> _messages = new ConcurrentQueue<ISmtp4devMessage>();
27+
28+
public IEnumerable<ISmtp4devMessage> Messages
29+
{
30+
get
31+
{
32+
return _messages.ToList();
33+
}
34+
}
35+
36+
public event EventHandler<Smtp4devMessageEventArgs> MessageAdded;
37+
38+
public void AddMessage(ISmtp4devMessage message)
39+
{
40+
_messages.Enqueue(message);
41+
MessageAdded?.Invoke(this, new Smtp4devMessageEventArgs(message));
42+
}
43+
44+
public ISmtp4devMessage CreateMessage(IConnection connection)
45+
{
46+
Guid id = Guid.NewGuid();
47+
48+
string fileName = Path.Combine(_directory.FullName, id.ToString() + ".msg");
49+
50+
return new Smtp4devMessage(connection.Session, id, new FileInfo(fileName));
51+
}
52+
}
53+
}

Rnwood.Smtp4dev/Model/ServiceExtensions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using System;
33
using System.Collections.Generic;
4+
using System.IO;
45
using System.Linq;
56
using System.Threading.Tasks;
67

@@ -13,8 +14,13 @@ public static void UseSmtp4dev(this IServiceCollection services)
1314
SettingsStore settingsStore = new SettingsStore();
1415
services.AddInstance<ISettingsStore>(settingsStore);
1516

16-
Smtp4devServer server = new Smtp4devServer(settingsStore);
17-
services.AddInstance<ISmtp4devServer>(server);
17+
string messagesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Smtp4dev", "Messages");
18+
19+
MessageStore messageStore = new MessageStore(new DirectoryInfo(messagesPath));
20+
services.AddInstance<IMessageStore>(messageStore);
21+
22+
Smtp4devEngine server = new Smtp4devEngine(settingsStore, messageStore);
23+
services.AddInstance<ISmtp4devEngine>(server);
1824
}
1925
}
2026
}

Rnwood.Smtp4dev/Model/Smtp4devServer.cs renamed to Rnwood.Smtp4dev/Model/Smtp4devEngine.cs

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,19 @@
77

88
namespace Rnwood.Smtp4dev.Model
99
{
10-
public class Smtp4devServer : ISmtp4devServer
10+
public class Smtp4devEngine : ISmtp4devEngine
1111
{
12-
private DefaultServer _server;
13-
private ObservableCollection<IMessage> _messages = new ObservableCollection<IMessage>();
12+
private Server _server;
1413
private ISettingsStore _settingsStore;
14+
private IMessageStore _messageStore;
1515

16-
public Smtp4devServer(ISettingsStore settingsStore)
16+
public Smtp4devEngine(ISettingsStore settingsStore, IMessageStore messageStore)
1717
{
1818
_settingsStore = settingsStore;
19-
20-
_messages.CollectionChanged += (s, ea) =>
21-
{
22-
MessagesChanged?.Invoke(this, new EventArgs());
23-
};
24-
19+
_messageStore = messageStore;
2520
TryStart();
2621
}
2722

28-
public IEnumerable<IMessage> Messages
29-
{
30-
get
31-
{
32-
return _messages.ToList();
33-
}
34-
}
35-
36-
public event EventHandler<EventArgs> MessagesChanged;
37-
3823
public Exception ServerError { get; set; }
3924

4025
public bool IsRunning
@@ -62,8 +47,7 @@ public void TryStart()
6247

6348
try
6449
{
65-
_server = new DefaultServer(settings.Port);
66-
_server.MessageReceived += MessageReceived;
50+
_server = new Server(new Smtp4devServerBehaviour(settings, OnMessageReceived, connection => (IMessageBuilder)_messageStore.CreateMessage(connection)));
6751
_server.Start();
6852
}
6953
catch (Exception e)
@@ -77,9 +61,9 @@ private void Stop()
7761
_server.Stop(true);
7862
}
7963

80-
private void MessageReceived(object sender, MessageEventArgs e)
64+
private void OnMessageReceived(ISmtp4devMessage message)
8165
{
82-
_messages.Add(e.Message);
66+
_messageStore.AddMessage(message);
8367
}
8468
}
8569
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Rnwood.SmtpServer;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Threading.Tasks;
7+
8+
namespace Rnwood.Smtp4dev.Model
9+
{
10+
internal class Smtp4devMessage : FileMessage, ISmtp4devMessage
11+
{
12+
internal Smtp4devMessage(ISession session, Guid id, FileInfo file) : base(file, true)
13+
{
14+
Id = id;
15+
}
16+
17+
public Guid Id { get; private set; }
18+
}
19+
}

0 commit comments

Comments
 (0)