Ejemplo n.º 1
0
        public ClientConnection(ISocketLike socket, ClientId connectionId, int bufferOutInBytes)
        {
            if (!connectionId.IsSpecified)
            {
                throw new ArgumentException("connectionId not specified", nameof(connectionId));
            }

            _socket      = socket;
            ConnectionId = connectionId;
            _bufferIn    = new byte[ClientServerMessage.MaxSizeInBytes];
            _bufferOut   = new byte[bufferOutInBytes];
        }
Ejemplo n.º 2
0
 public ConnectionController(BoundedInbox dispatchInbox, ISocketLike socket, ClientId clientId, ILog log = null)
 {
     _dispatchInbox       = dispatchInbox ?? throw new ArgumentNullException(nameof(dispatchInbox));
     _outbox              = new BoundedInbox(Constants.ConnectionControllerOutboxSize);
     _socket              = socket ?? throw new ArgumentNullException(nameof(socket));
     _clientId            = clientId;
     _log                 = log;
     _bufferIn            = new byte[Constants.MaxRequestSize];
     _mre                 = new ManualResetEvent(false);
     _tokenSource         = new CancellationTokenSource();
     _requestsInProgress  = 0;
     _responsePool        = new SpanPool <byte>(ResponsePoolSize);
     _responseCountInPool = 0;
 }
Ejemplo n.º 3
0
        private static BlockHandle OpenBlock(CommittedBlockId parentId, ISocketLike socket, ILog log)
        {
            var openBlockRequest = OpenBlockRequest.From(
                RequestId.MinRequestId, ClientId.MinClientId, parentId);

            socket.Send(openBlockRequest.Span);

            var openBlockResponse = new OpenBlockResponse(new byte[OpenBlockResponse.SizeInBytes]);

            socket.Receive(openBlockResponse.Span);

            if (openBlockResponse.Status != OpenBlockStatus.Success)
            {
                throw new InvalidOperationException("Failed to open block.");
            }

            log.Log(LogSeverity.Info, "Block opened, writing coins...");

            return(openBlockResponse.Handle);
        }
Ejemplo n.º 4
0
        private static void EnsureGenesisExists(ISocketLike socket)
        {
            var openGenesisRequest = OpenBlockRequest.ForGenesis(RequestId.MinRequestId);

            socket.Send(openGenesisRequest.Span);

            var openGenesisResponse = new OpenBlockResponse(new byte[OpenBlockResponse.SizeInBytes]);

            socket.Receive(openGenesisResponse.Span);

            if (openGenesisResponse.Status == OpenBlockStatus.Success)
            {
                var commitGenesisRequest = CommitBlockRequest.From(
                    RequestId.MinRequestId, ClientId.MinClientId, openGenesisResponse.Handle, CommittedBlockId.Genesis);
                socket.Send(commitGenesisRequest.Span);

                var commitGenesisResponse = new CommitBlockResponse(new byte[CommitBlockResponse.SizeInBytes]);
                socket.Receive(commitGenesisResponse.Span);
            }
        }
Ejemplo n.º 5
0
        private static void CommitBlock(BlockHandle handle, CommittedBlockId blockId, ISocketLike socket)
        {
            var request = CommitBlockRequest.From(
                RequestId.MinRequestId, ClientId.MinClientId, handle, blockId);

            socket.Send(request.Span);

            var response = new CommitBlockResponse(new byte[CommitBlockResponse.SizeInBytes]);

            socket.Receive(response.Span);

            if (response.Status != CommitBlockStatus.Success)
            {
                throw new InvalidOperationException("Failed to commit block.");
            }
        }