public Topic(string topicName, IFileSystem fileSystem) { if (!Regex.IsMatch(topicName, @"^[\d\-\.a-z_]*$")) { throw new InvalidTopicNameException($"'{topicName} is not valid."); } fileSystem.Activate(); _guard = new ExecutionGuard(); Name = topicName.NotNullOrEmpty(nameof(topicName)); _fileSystem = fileSystem.NotNull(nameof(fileSystem)); _groupConsumers = new Dictionary <string, Group>(); LoadGroupIndexs(); // find the product offset on startup _produceOffset = 0; using (var reader = _fileSystem.OpenIndexReader()) { if (reader.BaseStream.Length >= sizeof(long)) { reader.BaseStream.Seek(sizeof(long), SeekOrigin.End); _produceOffset = reader.ReadInt64(); } } _produceIndexWriter = _fileSystem.OpenIndexWriter(); _produceIndexWriter.BaseStream.Seek(0, SeekOrigin.End); _produceMessageWriter = _fileSystem.OpenMessageFileWriter(_produceOffset); _produceMessageWriter.BaseStream.Seek(0, SeekOrigin.End); }
public SocketServer() { Guard = new ExecutionGuard(); Clients = new Dictionary <long, SocketClient>(); }