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]; }
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; }
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); }
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); } }
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."); } }