public async Task<ResponseMessage> SendMessageAsync(RequestMessage message) { Requires.NotNull(message, "message"); using (var tcpClient = new TcpClient(Hostname, Port)) { NetworkStream stream = tcpClient.GetStream(); await _messageFormatter.WriteMessageAsync(stream, message); ResponseMessage responseMessage = await _messageFormatter.ReadMessageAsync<ResponseMessage>(stream); return responseMessage; } }
private Boolean Equals(RequestMessage other) { return _reason == other._reason && String.Equals(_filePath, other._filePath); }
private ResponseMessage HandleMessage(RequestMessage message) { RequestMessageReason messageReason = message.Reason; string filePath = message.FilePath; Process process = message.SenderProcessInfo.GetProcess(); if (process == null) { return ResponseMessage.CreateInvalid(filePath); } switch (messageReason) { case RequestMessageReason.FileAccessRequest: { return TryGetAccess(filePath, process) ? ResponseMessage.CreateAccessGranted(filePath) : ResponseMessage.CreateAccessRefused(filePath); } case RequestMessageReason.FileClosed: { return TryUnlockFile(filePath, process) ? ResponseMessage.CreateOk(filePath) : ResponseMessage.CreateInvalid(filePath); } case RequestMessageReason.TakePlaceInQueueForAccess: { if (TryGetAccess(filePath, process)) { return ResponseMessage.CreateAccessGranted(filePath); } string handleName = TakePlaceInQueueForAccess(filePath, process); return ResponseMessage.CreateWaitForAccess(filePath, handleName); } case RequestMessageReason.RemoveFromQueueForAccess: { return TryRemoveFromWaitingQueue(filePath, process) ? ResponseMessage.CreateOk(filePath) : ResponseMessage.CreateInvalid(filePath); } default: { return ResponseMessage.CreateInvalid(filePath); } } }