Пример #1
0
        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);
        }
Пример #2
0
 public SocketServer()
 {
     Guard   = new ExecutionGuard();
     Clients = new Dictionary <long, SocketClient>();
 }