Skip to content

Commit

Permalink
Minor changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
yallie committed Jan 13, 2025
1 parent 1838ec8 commit 7da094a
Show file tree
Hide file tree
Showing 11 changed files with 271 additions and 287 deletions.
6 changes: 3 additions & 3 deletions CoreRemoting.Tests/SessionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,13 @@ public async Task CloseSession_method_should_close_session_gracefully_issue55()
});

var disconnected = new TaskCompletionSource<bool>();
client.Connect();
client.AfterDisconnect += () => disconnected.TrySetResult(true);
client.Connect();

// RemotingSession.Current should be accessible to the component constructor
var proxy = client.CreateProxy<ISessionAwareService>();

// Wait(1s) should end after CloseSession(0.5s)
// Wait(1s) should finish after CloseSession(0.5s)
var proxy_Wait = proxy.Wait(1);

// CloseSession shouldn't throw exceptions
Expand All @@ -224,6 +224,6 @@ public async Task CloseSession_method_should_close_session_gracefully_issue55()
await proxy_Wait;

// Disconnection event should occur
await disconnected.Task.Timeout(2).ConfigureAwait(false);
await disconnected.Task.Timeout(2);
}
}
81 changes: 40 additions & 41 deletions CoreRemoting.Tests/Tools/CustomMessageBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,47 @@
using CoreRemoting.RpcMessaging;
using CoreRemoting.Serialization;

namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

/// <summary>
/// Custom client-side RPC message processor.
/// </summary>
public class CustomMessageBuilder : IMethodCallMessageBuilder
{
/// <summary>
/// Custom client-side RPC message processor.
/// </summary>
public class CustomMessageBuilder : IMethodCallMessageBuilder
public CustomMessageBuilder()
{
Builder = new MethodCallMessageBuilder();
}

public Action<MethodCallMessage> ProcessMethodCallMessage { get; set; } = _ => { };

// ReSharper disable once MemberCanBePrivate.Global
public Action<IEnumerable<MethodCallParameterMessage>> ProcessMethodParameterInfos { get; set; } = _ => { };

// ReSharper disable once MemberCanBePrivate.Global
public Action<MethodCallResultMessage> ProcessMethodCallResultMessage { get; set; } = _ => { };

private MethodCallMessageBuilder Builder { get; set; }

public MethodCallMessage BuildMethodCallMessage(ISerializerAdapter serializer, string remoteServiceName, MethodInfo targetMethod, object[] args)
{
var m = Builder.BuildMethodCallMessage(serializer, remoteServiceName, targetMethod, args);
ProcessMethodCallMessage(m);
return m;
}

public IEnumerable<MethodCallParameterMessage> BuildMethodParameterInfos(ISerializerAdapter serializer, MethodInfo targetMethod, object[] args)
{
var m = Builder.BuildMethodParameterInfos(serializer, targetMethod, args);
var methodCallParameterMessages = m as MethodCallParameterMessage[] ?? m.ToArray();
ProcessMethodParameterInfos(methodCallParameterMessages);
return methodCallParameterMessages;
}

public MethodCallResultMessage BuildMethodCallResultMessage(ISerializerAdapter serializer, Guid uniqueCallKey, MethodInfo method, object[] args, object returnValue)
{
public CustomMessageBuilder()
{
Builder = new MethodCallMessageBuilder();
}

public Action<MethodCallMessage> ProcessMethodCallMessage { get; set; } = _ => { };

// ReSharper disable once MemberCanBePrivate.Global
public Action<IEnumerable<MethodCallParameterMessage>> ProcessMethodParameterInfos { get; set; } = _ => { };

// ReSharper disable once MemberCanBePrivate.Global
public Action<MethodCallResultMessage> ProcessMethodCallResultMessage { get; set; } = _ => { };

private MethodCallMessageBuilder Builder { get; set; }

public MethodCallMessage BuildMethodCallMessage(ISerializerAdapter serializer, string remoteServiceName, MethodInfo targetMethod, object[] args)
{
var m = Builder.BuildMethodCallMessage(serializer, remoteServiceName, targetMethod, args);
ProcessMethodCallMessage(m);
return m;
}

public IEnumerable<MethodCallParameterMessage> BuildMethodParameterInfos(ISerializerAdapter serializer, MethodInfo targetMethod, object[] args)
{
var m = Builder.BuildMethodParameterInfos(serializer, targetMethod, args);
var methodCallParameterMessages = m as MethodCallParameterMessage[] ?? m.ToArray();
ProcessMethodParameterInfos(methodCallParameterMessages);
return methodCallParameterMessages;
}

public MethodCallResultMessage BuildMethodCallResultMessage(ISerializerAdapter serializer, Guid uniqueCallKey, MethodInfo method, object[] args, object returnValue)
{
var m = Builder.BuildMethodCallResultMessage(serializer, uniqueCallKey, method, args, returnValue);
ProcessMethodCallResultMessage(m);
return m;
}
var m = Builder.BuildMethodCallResultMessage(serializer, uniqueCallKey, method, args, returnValue);
ProcessMethodCallResultMessage(m);
return m;
}
}
11 changes: 5 additions & 6 deletions CoreRemoting.Tests/Tools/FactoryService.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

public class FactoryService : IFactoryService
{
public class FactoryService : IFactoryService
public ITestService GetTestService()
{
public ITestService GetTestService()
{
return new TestService();
}
return new TestService();
}
}
35 changes: 17 additions & 18 deletions CoreRemoting.Tests/Tools/FakeAuthProvider.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
using System;
using CoreRemoting.Authentication;

namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

public class FakeAuthProvider : IAuthenticationProvider
{
public class FakeAuthProvider : IAuthenticationProvider
public Func<Credential[], bool> AuthenticateFake { get; set; }

public bool Authenticate(Credential[] credentials, out RemotingIdentity authenticatedIdentity)
{
public Func<Credential[], bool> AuthenticateFake { get; set; }

public bool Authenticate(Credential[] credentials, out RemotingIdentity authenticatedIdentity)
{
var success = AuthenticateFake?.Invoke(credentials) ?? true;
var success = AuthenticateFake?.Invoke(credentials) ?? true;

authenticatedIdentity =
new RemotingIdentity()
{
AuthenticationType = "Fake",
Domain = "domain",
IsAuthenticated = success,
Name = credentials[0].Value,
Roles = ["Test"],
};
authenticatedIdentity =
new RemotingIdentity()
{
AuthenticationType = "Fake",
Domain = "domain",
IsAuthenticated = success,
Name = credentials[0].Value,
Roles = ["Test"],
};

return success;
}
return success;
}
}
9 changes: 4 additions & 5 deletions CoreRemoting.Tests/Tools/IFactoryService.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

public interface IFactoryService
{
public interface IFactoryService
{
ITestService GetTestService();
}
ITestService GetTestService();
}
5 changes: 0 additions & 5 deletions CoreRemoting.Tests/Tools/IFailingService.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
using System;
using System.Data;
using System.Threading.Tasks;
using CoreRemoting.Tests.ExternalTypes;

namespace CoreRemoting.Tests.Tools;

public interface IFailingService
Expand Down
16 changes: 7 additions & 9 deletions CoreRemoting.Tests/Tools/ISessionAwareService.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
using System.Threading.Tasks;
using System;

namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

public interface ISessionAwareService
{
public interface ISessionAwareService
{
bool HasSameSessionInstance { get; }
bool HasSameSessionInstance { get; }

string ClientAddress { get; }
string ClientAddress { get; }

Task Wait(double seconds);
Task Wait(double seconds);

Task CloseSession(double seconds);
}
Task CloseSession(double seconds);
}
49 changes: 24 additions & 25 deletions CoreRemoting.Tests/Tools/ITestService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,43 @@
using System.Threading.Tasks;
using CoreRemoting.Tests.ExternalTypes;

namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

public delegate void ServerEventHandler(object sender);

[ReturnAsProxy]
public interface ITestService : IBaseService
{
public delegate void ServerEventHandler(object sender);

[ReturnAsProxy]
public interface ITestService : IBaseService
{
event Action ServiceEvent;
event Action ServiceEvent;

event ServerEventHandler CustomDelegateEvent;
object TestMethod(object arg);
event ServerEventHandler CustomDelegateEvent;

object TestMethod(object arg);

void TestMethodWithDelegateArg(Action<string> callback);
void TestMethodWithDelegateArg(Action<string> callback);

void FireServiceEvent();
void FireServiceEvent();

void FireCustomDelegateEvent();
void FireCustomDelegateEvent();

[OneWay]
void OneWayMethod();
[OneWay]
void OneWayMethod();

void TestExternalTypeParameter(DataClass data);
void TestExternalTypeParameter(DataClass data);

string Echo(string text);
string Echo(string text);

string Reverse(string text);
string Reverse(string text);

void MethodWithOutParameter(out int counter);
void MethodWithOutParameter(out int counter);

void Error(string text);
void Error(string text);

Task ErrorAsync(string text);
Task ErrorAsync(string text);

void NonSerializableError(string text, params object[] data);
void NonSerializableError(string text, params object[] data);

DataTable TestDt(DataTable dt, long num);
DataTable TestDt(DataTable dt, long num);

(T duplicate, int size) Duplicate<T>(T sample) where T : class;
}
(T duplicate, int size) Duplicate<T>(T sample) where T : class;
}
46 changes: 22 additions & 24 deletions CoreRemoting.Tests/Tools/SessionAwareService.cs
Original file line number Diff line number Diff line change
@@ -1,37 +1,35 @@
using System;
using System.Threading;
using System.Threading.Tasks;

namespace CoreRemoting.Tests.Tools
namespace CoreRemoting.Tests.Tools;

internal class SessionAwareService : ISessionAwareService
{
internal class SessionAwareService : ISessionAwareService
public SessionAwareService()
{
public SessionAwareService()
{
CurrentSession = RemotingSession.Current;
if (CurrentSession == null)
throw new ArgumentNullException(nameof(CurrentSession));
CurrentSession = RemotingSession.Current;
if (CurrentSession == null)
throw new ArgumentNullException(nameof(CurrentSession));

if (CurrentSession.ClientAddress == null)
throw new ArgumentNullException(nameof(CurrentSession.ClientAddress));
Console.WriteLine(CurrentSession.ClientAddress);
}
if (CurrentSession.ClientAddress == null)
throw new ArgumentNullException(nameof(CurrentSession.ClientAddress));
Console.WriteLine(CurrentSession.ClientAddress);
}

public RemotingSession CurrentSession { get; }
public RemotingSession CurrentSession { get; }

public bool HasSameSessionInstance =>
ReferenceEquals(CurrentSession, RemotingSession.Current);
public bool HasSameSessionInstance =>
ReferenceEquals(CurrentSession, RemotingSession.Current);

public string ClientAddress =>
CurrentSession.ClientAddress;
public string ClientAddress =>
CurrentSession.ClientAddress;

public async Task Wait(double seconds) =>
await Task.Delay(TimeSpan.FromSeconds(seconds));
public async Task Wait(double seconds) =>
await Task.Delay(TimeSpan.FromSeconds(seconds));

public async Task CloseSession(double seconds)
{
RemotingSession.Current.Close();
await Wait(seconds);
}
public async Task CloseSession(double seconds)
{
RemotingSession.Current.Close();
await Wait(seconds);
}
}
Loading

0 comments on commit 7da094a

Please sign in to comment.