Skip to content

Commit cd995a1

Browse files
committed
Remove lambdas, add tests
1 parent 2c98a63 commit cd995a1

2 files changed

Lines changed: 57 additions & 11 deletions

File tree

SteamKit2/SteamKit2/Steam/SteamClient/SteamClient.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,12 @@ public void AddHandler( ClientMsgHandler handler )
121121
{
122122
ArgumentNullException.ThrowIfNull( handler );
123123

124-
var type = handler.GetType();
125-
var msgIndex = handlers.FindIndex( h => h.GetType() == type );
126-
127-
if ( msgIndex > -1 )
124+
foreach ( var h in handlers )
128125
{
129-
throw new InvalidOperationException( string.Format( "A handler of type \"{0}\" is already registered.", handler.GetType() ) );
126+
if ( h.GetType() == handler.GetType() )
127+
{
128+
throw new InvalidOperationException( $"A handler of type \"{handler.GetType()}\" is already registered." );
129+
}
130130
}
131131

132132
AddHandlerCore( handler );
@@ -144,11 +144,13 @@ private void AddHandlerCore( ClientMsgHandler handler )
144144
/// <param name="handler">The handler name to remove.</param>
145145
public void RemoveHandler( Type handler )
146146
{
147-
var msgIndex = handlers.FindIndex( h => h.GetType() == handler );
148-
149-
if ( msgIndex > -1 )
147+
for ( var i = 0; i < handlers.Count; i++ )
150148
{
151-
handlers.RemoveAt( msgIndex );
149+
if ( handlers[ i ].GetType() == handler )
150+
{
151+
handlers.RemoveAt( i );
152+
return;
153+
}
152154
}
153155
}
154156

@@ -171,9 +173,15 @@ public void RemoveHandler( ClientMsgHandler handler )
171173
public T? GetHandler<T>()
172174
where T : ClientMsgHandler
173175
{
174-
Type type = typeof( T );
176+
foreach ( var handler in handlers )
177+
{
178+
if ( handler.GetType() == typeof( T ) )
179+
{
180+
return ( T )handler;
181+
}
182+
}
175183

176-
return handlers.Find( h => h.GetType() == type ) as T;
184+
return null;
177185
}
178186

179187
/// <summary>

SteamKit2/Tests/SteamClientFacts.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public void ConstructorSetsInitialHandlers()
2626
Assert.NotNull(steamClient.GetHandler<SteamMatchmaking>());
2727
Assert.NotNull(steamClient.GetHandler<SteamNetworking>());
2828
Assert.NotNull(steamClient.GetHandler<SteamContent>());
29+
Assert.NotNull(steamClient.GetHandler<SteamAuthTicket>());
2930
}
3031

3132
[Fact]
@@ -62,6 +63,43 @@ public void RemoveHandlerRemovesHandlerByInstance()
6263
Assert.Null(steamClient.GetHandler<TestMsgHandler>());
6364
}
6465

66+
[Fact]
67+
public void AddHandlerThrowsOnDuplicateHandler()
68+
{
69+
var steamClient = new SteamClient();
70+
steamClient.AddHandler(new TestMsgHandler());
71+
72+
Assert.Throws<InvalidOperationException>(() => steamClient.AddHandler(new TestMsgHandler()));
73+
}
74+
75+
[Fact]
76+
public void RemoveHandlerByTypeDoesNothingWhenNotRegistered()
77+
{
78+
var steamClient = new SteamClient();
79+
Assert.Null(steamClient.GetHandler<TestMsgHandler>());
80+
81+
steamClient.RemoveHandler(typeof(TestMsgHandler));
82+
Assert.Null(steamClient.GetHandler<TestMsgHandler>());
83+
}
84+
85+
[Fact]
86+
public void GetRequiredHandlerReturnsHandler()
87+
{
88+
var steamClient = new SteamClient();
89+
var handler = steamClient.GetRequiredHandler<SteamUser>();
90+
91+
Assert.NotNull(handler);
92+
Assert.IsType<SteamUser>(handler);
93+
}
94+
95+
[Fact]
96+
public void GetRequiredHandlerThrowsWhenNotRegistered()
97+
{
98+
var steamClient = new SteamClient();
99+
100+
Assert.Throws<InvalidOperationException>(() => steamClient.GetRequiredHandler<TestMsgHandler>());
101+
}
102+
65103
[Fact]
66104
public void GetNextJobIDIsThreadsafe()
67105
{

0 commit comments

Comments
 (0)