Skip to content

Commit

Permalink
Renamed NetworkIdProvider to WorkerIdProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
phatboyg committed Jan 18, 2012
1 parent f6130fa commit 6605e2e
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/NewId.Tests/LongTerm_Specs.cs
Expand Up @@ -10,7 +10,7 @@ public class Generating_ids_over_time
[Test] [Test]
public void Should_keep_them_ordered_for_sql_server() public void Should_keep_them_ordered_for_sql_server()
{ {
var generator = new NewIdGenerator(new DefaultNetworkIdProvider(), new TimeLapseTickProvider()); var generator = new NewIdGenerator(new TimeLapseTickProvider(), new NetworkAddressWorkerIdProvider());
generator.Next(); generator.Next();


int limit = 1024; int limit = 1024;
Expand Down
4 changes: 2 additions & 2 deletions src/NewId.Tests/NetworkAddress_Specs.cs
Expand Up @@ -9,9 +9,9 @@ public class When_getting_a_network_address_for_the_id_generator
[Test] [Test]
public void Should_pull_the_network_adapter_mac_address() public void Should_pull_the_network_adapter_mac_address()
{ {
var networkIdProvider = new DefaultNetworkIdProvider(); var networkIdProvider = new NetworkAddressWorkerIdProvider();


byte[] networkId = networkIdProvider.NetworkId; byte[] networkId = networkIdProvider.GetWorkerId(0);


Assert.IsNotNull(networkId); Assert.IsNotNull(networkId);
Assert.AreEqual(6, networkId.Length); Assert.AreEqual(6, networkId.Length);
Expand Down
7 changes: 0 additions & 7 deletions src/NewId/NetworkIdProvider.cs

This file was deleted.

12 changes: 6 additions & 6 deletions src/NewId/NewId.cs
Expand Up @@ -17,7 +17,7 @@ public struct NewId :
{ {
static NewId _empty; static NewId _empty;
static NewIdGenerator _generator; static NewIdGenerator _generator;
static NetworkIdProvider _networkIdProvider; static WorkerIdProvider _workerIdProvider;
static TickProvider _tickProvider; static TickProvider _tickProvider;


readonly Int32 _a; readonly Int32 _a;
Expand Down Expand Up @@ -66,12 +66,12 @@ public static NewId Empty


static NewIdGenerator Generator static NewIdGenerator Generator
{ {
get { return _generator ?? (_generator = new NewIdGenerator(NetworkIdProvider, TickProvider)); } get { return _generator ?? (_generator = new NewIdGenerator(TickProvider, WorkerIdProvider)); }
} }


static NetworkIdProvider NetworkIdProvider static WorkerIdProvider WorkerIdProvider
{ {
get { return _networkIdProvider ?? (_networkIdProvider = new DefaultNetworkIdProvider()); } get { return _workerIdProvider ?? (_workerIdProvider = new NetworkAddressWorkerIdProvider()); }
} }


static TickProvider TickProvider static TickProvider TickProvider
Expand Down Expand Up @@ -257,9 +257,9 @@ public static void SetGenerator(NewIdGenerator generator)
_generator = generator; _generator = generator;
} }


public static void SetNetworkIdProvider(NetworkIdProvider provider) public static void SetWorkerIdProvider(WorkerIdProvider provider)
{ {
_networkIdProvider = provider; _workerIdProvider = provider;
} }


public static void SetTickProvider(TickProvider provider) public static void SetTickProvider(TickProvider provider)
Expand Down
4 changes: 2 additions & 2 deletions src/NewId/NewId.csproj
Expand Up @@ -35,13 +35,13 @@
<Reference Include="System.Core" /> <Reference Include="System.Core" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="NetworkIdProvider.cs" /> <Compile Include="WorkerIdProvider.cs" />
<Compile Include="TickProvider.cs" /> <Compile Include="TickProvider.cs" />
<Compile Include="NewId.cs" /> <Compile Include="NewId.cs" />
<Compile Include="NewIdGenerator.cs" /> <Compile Include="NewIdGenerator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Providers\DateTimeTickProvider.cs" /> <Compile Include="Providers\DateTimeTickProvider.cs" />
<Compile Include="Providers\DefaultNetworkIdProvider.cs" /> <Compile Include="Providers\NetworkAddressWorkerIdProvider.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Expand Down
11 changes: 9 additions & 2 deletions src/NewId/NewIdGenerator.cs
Expand Up @@ -6,6 +6,7 @@ public class NewIdGenerator


readonly object _sync = new object(); readonly object _sync = new object();
readonly TickProvider _tickProvider; readonly TickProvider _tickProvider;
readonly int _workerIndex;
int _a; int _a;
int _b; int _b;
int _c; int _c;
Expand All @@ -15,15 +16,21 @@ public class NewIdGenerator
ushort _sequence; ushort _sequence;




public NewIdGenerator(NetworkIdProvider networkIdProvider, TickProvider tickProvider) public NewIdGenerator(TickProvider tickProvider, WorkerIdProvider workerIdProvider, int workerIndex)
{ {
_networkId = networkIdProvider.NetworkId; _workerIndex = workerIndex;
_networkId = workerIdProvider.GetWorkerId(_workerIndex);
_tickProvider = tickProvider; _tickProvider = tickProvider;


_c = _networkId[0] << 24 | _networkId[1] << 16 | _networkId[2] << 8 | _networkId[3]; _c = _networkId[0] << 24 | _networkId[1] << 16 | _networkId[2] << 8 | _networkId[3];
_d = _networkId[4] << 24 | _networkId[5] << 16; _d = _networkId[4] << 24 | _networkId[5] << 16;
} }


public NewIdGenerator(TickProvider tickProvider, WorkerIdProvider workerIdProvider)
: this(tickProvider, workerIdProvider, 0)
{
}

public NewId Next() public NewId Next()
{ {
ushort sequence; ushort sequence;
Expand Down
Expand Up @@ -5,17 +5,15 @@ namespace NewId.Providers
using System.Linq; using System.Linq;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;


public class DefaultNetworkIdProvider : public class NetworkAddressWorkerIdProvider :
NetworkIdProvider WorkerIdProvider
{ {
byte[] _address; public byte[] GetWorkerId(int index)

public byte[] NetworkId
{ {
get { return _address ?? (_address = GetNetworkAddress()); } return GetNetworkAddress(index);
} }


static byte[] GetNetworkAddress() static byte[] GetNetworkAddress(int index)
{ {
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();


Expand All @@ -26,7 +24,10 @@ static byte[] GetNetworkAddress()
IEnumerable<NetworkInterface> wireless = IEnumerable<NetworkInterface> wireless =
interfaces.Where(x => x.NetworkInterfaceType == NetworkInterfaceType.Wireless80211); interfaces.Where(x => x.NetworkInterfaceType == NetworkInterfaceType.Wireless80211);


NetworkInterface network = ethernet.Concat(gigabit).Concat(wireless).FirstOrDefault(); NetworkInterface network = ethernet.Concat(gigabit).Concat(wireless)
.Skip(index)
.FirstOrDefault();

if (network == null) if (network == null)
{ {
throw new InvalidOperationException("Unable to find usable network adapter for unique address"); throw new InvalidOperationException("Unable to find usable network adapter for unique address");
Expand Down
7 changes: 7 additions & 0 deletions src/NewId/WorkerIdProvider.cs
@@ -0,0 +1,7 @@
namespace NewId
{
public interface WorkerIdProvider
{
byte[] GetWorkerId(int index);
}
}

0 comments on commit 6605e2e

Please sign in to comment.