This commit is contained in:
Stef Heyenrath
2026-02-11 23:36:44 +01:00
parent deb9777f88
commit d6c5ede20b
6 changed files with 22863 additions and 21669 deletions

View File

@@ -100,21 +100,17 @@ internal class WebSocketBuilder : IWebSocketBuilder
});
}
public IWebSocketMessageConditionBuilder WhenMessage(string condition)
public IWebSocketMessageConditionBuilder WhenMessage(string wildcardPattern)
{
Guard.NotNull(condition);
// Use RegexMatcher for substring matching - escape special chars and wrap with wildcards
// Convert the string to a wildcard pattern that matches if it contains the condition
var pattern = $"*{condition}*";
var matcher = new WildcardMatcher(MatchBehaviour.AcceptOnMatch, pattern);
Guard.NotNull(wildcardPattern);
var matcher = new WildcardMatcher(MatchBehaviour.AcceptOnMatch, wildcardPattern);
return new WebSocketMessageConditionBuilder(this, matcher);
}
public IWebSocketMessageConditionBuilder WhenMessage(byte[] condition)
public IWebSocketMessageConditionBuilder WhenMessage(byte[] exactPattern)
{
Guard.NotNull(condition);
// Use ExactObjectMatcher for byte matching
var matcher = new ExactObjectMatcher(MatchBehaviour.AcceptOnMatch, condition);
Guard.NotNull(exactPattern);
var matcher = new ExactObjectMatcher(MatchBehaviour.AcceptOnMatch, exactPattern);
return new WebSocketMessageConditionBuilder(this, matcher);
}
@@ -241,12 +237,22 @@ internal class WebSocketBuilder : IWebSocketBuilder
private static async Task<bool> MatchMessageAsync(WebSocketMessage message, IMatcher matcher)
{
if (message.MessageType == WebSocketMessageType.Text && matcher is IStringMatcher stringMatcher)
if (message.MessageType == WebSocketMessageType.Text)
{
var result = stringMatcher.IsMatch(message.Text);
return result.IsPerfect();
if (matcher is IStringMatcher stringMatcher)
{
var result = stringMatcher.IsMatch(message.Text);
return result.IsPerfect();
}
if (matcher is IFuncMatcher funcMatcher)
{
var result = funcMatcher.IsMatch(message.Text);
return result.IsPerfect();
}
}
if (message.MessageType == WebSocketMessageType.Binary && matcher is IBytesMatcher bytesMatcher && message.Bytes != null)
{
var result = await bytesMatcher.IsMatchAsync(message.Bytes);