Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
 private Boolean Equals(RequestMessage other)
 {
     return _reason == other._reason && String.Equals(_filePath, other._filePath);
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }