/// <summary>
        /// Send a get file properties request. Block until response has arrived.
        /// </summary>
        public bool GetFileProperties(string remoteFilePathAndName, out FileProperties properties)
        {
            _lastReceivedFileProperties = null;
            mreListFileProperties.Reset();
            bool sendSuccess = FileTunnelClient.SendMessageCarrier(new MessageCarrier(MessageType.FilePropertiesRequest)
            {
                Payload = remoteFilePathAndName
            });

            if (!sendSuccess)
            {
                properties = null; return(false);
            }
            mreListFileProperties.WaitOne();

            if (_lastReceivedFileProperties != null)
            {
                properties = _lastReceivedFileProperties;
                return(true);
            }

            else
            {
                properties = null;
                return(false);
            }
        }
        public bool WatchDirectory(Action <string> modified)
        {
            bool sendSuccess = FileTunnelClient.SendMessageCarrier(new MessageCarrier(MessageType.WatchDirectoryRequest));

            if (sendSuccess)
            {
                WatcherFileModified = modified;
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Send a file download request. Block until file/response has arrived.
        /// </summary>
        public bool Download(string remoteFilePathAndName)
        {
            mreDownload.Reset();
            _lastRequestedFile = Path.GetFileName(remoteFilePathAndName);
            bool sendSuccess = FileTunnelClient.SendMessageCarrier(new MessageCarrier(MessageType.FileRequest)
            {
                Payload = remoteFilePathAndName
            });

            if (!sendSuccess)
            {
                return(false);
            }
            mreDownload.WaitOne();
            return(_lastReceiveFileSuccess);
        }
        /// <summary>
        /// Send a list directories request. Block until response has arrived.
        /// </summary>
        public bool ListDirectories(string remotePath, out List <string> remoteDirectories)
        {
            _lastReceivedDirectoriesList = null;
            mreListDirectories.Reset();
            bool sendSuccess = FileTunnelClient.SendMessageCarrier(new MessageCarrier(MessageType.ListDirectoriesRequest)
            {
                Payload = remotePath
            });

            if (!sendSuccess)
            {
                remoteDirectories = null; return(false);
            }
            mreListDirectories.WaitOne();
            remoteDirectories = _lastReceivedDirectoriesList;
            return(sendSuccess);
        }