Created
September 18, 2018 08:47
-
-
Save chgeuer/e0fdb8a2068d218e6f78362ad0ac8e5c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace EricaRepro | |
{ | |
using System; | |
using System.Text; | |
using System.Threading.Tasks; | |
public class MessageForwarder | |
{ | |
public bool AlreadyForwardedHeader { get; private set; } = false; | |
public Func<byte[], Task> Forwader { get; private set; } | |
private readonly Func<string, Task> _logger; | |
public MessageForwarder(Func<byte[], Task> forwader, Func<string, Task> logger = null) | |
{ | |
this.Forwader = forwader; | |
this._logger = logger; | |
} | |
private Task log(string message) | |
{ | |
if (_logger == null) | |
{ | |
return Task.CompletedTask; | |
} | |
return _logger(message); | |
} | |
public async Task ReceiveAsync(byte[] msg) | |
{ | |
var msgSTring = Encoding.UTF8.GetString(msg); | |
await log($"Received {msgSTring}"); | |
if (msgSTring.Split(',')[0].Contains("header")) | |
{ | |
if (this.AlreadyForwardedHeader) | |
{ | |
return; | |
} | |
else | |
{ | |
this.AlreadyForwardedHeader = true; | |
} | |
} | |
await this.Forwader(msg); | |
await log($"Forwarded message {msgSTring}"); | |
} | |
} | |
} | |
namespace UnitTestProject1 | |
{ | |
using System; | |
using System.Text; | |
using System.Threading.Tasks; | |
using Microsoft.VisualStudio.TestTools.UnitTesting; | |
using EricaRepro; | |
[TestClass] | |
public class UnitTest1 | |
{ | |
[TestMethod] | |
public async Task TestMethod1Async() | |
{ | |
byte[] msg = null; | |
var fw1 = new MessageForwarder(forwader: async (bytes) => | |
{ | |
await Task.Delay(0); | |
msg = bytes; | |
}); | |
Assert.IsFalse(fw1.AlreadyForwardedHeader); | |
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("Hallo")); | |
Assert.IsFalse(fw1.AlreadyForwardedHeader); | |
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("header: 123")); | |
Assert.IsTrue(fw1.AlreadyForwardedHeader); | |
} | |
[TestMethod] | |
public async Task TestMethodWithLoggingAsync() | |
{ | |
byte[] msg = null; | |
var fw1 = new MessageForwarder( | |
forwader: async (bytes) => | |
{ | |
await Task.Delay(0); | |
msg = bytes; | |
}, | |
logger: Console.Out.WriteLineAsync); | |
Assert.IsFalse(fw1.AlreadyForwardedHeader); | |
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("Hallo")); | |
Assert.IsFalse(fw1.AlreadyForwardedHeader); | |
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("header: 123")); | |
Assert.IsTrue(fw1.AlreadyForwardedHeader); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment