public EntitySyncServer(long threadCount, int syncRate, Func <IClientRepository, NetworkLayer> createNetworkLayer, Func <SpatialPartition> createSpatialPartition, IIdProvider <ulong> idProvider) { if (threadCount < 1) { throw new ArgumentException("threadCount must be >= 1"); } entityThreads = new EntityThread[threadCount]; entityThreadRepositories = new EntityThreadRepository[threadCount]; clientThreadRepositories = new ClientThreadRepository[threadCount]; for (var i = 0; i < threadCount; i++) { var clientThreadRepository = new ClientThreadRepository(); var entityThreadRepository = new EntityThreadRepository(); entityThreadRepositories[i] = entityThreadRepository; clientThreadRepositories[i] = clientThreadRepository; entityThreads[i] = new EntityThread(entityThreadRepository, clientThreadRepository, createSpatialPartition(), syncRate, OnEntityCreate, OnEntityRemove, OnEntityDataChange, OnEntityPositionChange, OnEntityClearCache); } entityRepository = new EntityRepository(entityThreadRepositories); clientRepository = new ClientRepository(clientThreadRepositories); networkLayer = createNetworkLayer(clientRepository); networkLayer.OnConnectionConnect += OnConnectionConnect; networkLayer.OnConnectionDisconnect += OnConnectionDisconnect; this.idProvider = idProvider; }
public EntitySyncServer(ulong threadCount, int syncRate, Func <ulong, bool> netOwnerEvents, Func <ulong, IClientRepository, NetworkLayer> createNetworkLayer, Func <IEntity, ulong, ulong> entityThreadId, Func <ulong, ulong, ulong, ulong> entityIdAndTypeThreadId, Func <ulong, SpatialPartition> createSpatialPartition, IIdProvider <ulong> idProvider) { if (threadCount < 1) { throw new ArgumentException("threadCount must be >= 1"); } if (syncRate < 0) { throw new ArgumentException("syncRate must be >= 0"); } entityThreads = new EntityThread[threadCount]; entityThreadRepositories = new EntityThreadRepository[threadCount]; clientThreadRepositories = new ClientThreadRepository[threadCount]; spatialPartitions = new SpatialPartition[threadCount]; for (ulong i = 0; i < threadCount; i++) { var clientThreadRepository = new ClientThreadRepository(); var entityThreadRepository = new EntityThreadRepository(); var spatialPartition = createSpatialPartition(i); entityThreadRepositories[i] = entityThreadRepository; clientThreadRepositories[i] = clientThreadRepository; spatialPartitions[i] = spatialPartition; entityThreads[i] = new EntityThread(i, entityThreadRepository, clientThreadRepository, spatialPartition, syncRate, netOwnerEvents(i), OnEntityCreate, OnEntityRemove, OnEntityDataChange, OnEntityPositionChange, OnEntityClearCache, OnEntityNetOwnerChange); } entityRepository = new EntityRepository(entityThreadRepositories, entityThreadId, entityIdAndTypeThreadId); clientRepository = new ClientRepository(clientThreadRepositories); networkLayer = createNetworkLayer(threadCount, clientRepository); networkLayer.OnConnectionConnect += OnConnectionConnect; networkLayer.OnConnectionDisconnect += OnConnectionDisconnect; this.idProvider = idProvider; }