Exemple #1
0
        /// <summary>
        /// Event handler for SyncRequest being received by Host.
        /// </summary>
        /// <param name="arg">The SyncRequest that recieved.</param>
        /// <returns></returns>
        //======Joined requests======
        //!qq = Exit
        //!getFile *relative path to file* = upload file to Joined
        //!catchFile *relative path to file* = get file from Joined
        //!exists *relative path to file* = check if file exists on servers side and then answer for Joined
        //!getFileDataList = get all relative pathes and hashes to it and send it to Joined
        //!sessiondone = updates servers Filer and Hasher
        //!rm *relative path to file* = remove file on Host side
        //!getFileInfo *relative path to file* = get file info from Host

        //======Host Respones======
        //!dd = ready for next operation
        //!Yes = answer for file existance if it does exist
        //!No = answer for file existance if it does not exist
        private SyncResponse SyncSolver(SyncRequest arg)
        {
            servH.Events.StreamReceived -= StreamReceived;
            string       cmd = GetStringFromBytes(arg.Data);
            SyncResponse sr  = new SyncResponse(arg, GetBytesFromString("NotRecognized"));

            if (cmd.Contains("!qq"))
            {
                servH.DisconnectClients();
                servH.Stop();
                servH.Dispose();
            }
            else if (cmd.Contains("!getFile "))
            {
                cmd = cmd.Replace("!getFile ", "");
                UploadFile(arg.IpPort, cmd);
                sr = new SyncResponse(arg, GetBytesFromString("!dd"));
            }
            else if (cmd.Contains("!catchFile "))
            {
                while (gettingFile)
                {
                }

                DownloadFileTo = Filed.RootPath + cmd.Replace("!catchFile ", "");
                sr             = new SyncResponse(arg, GetBytesFromString("!dd"));
                servH.Events.StreamReceived += StreamReceived;
            }
            else if (cmd.Contains("!exists "))
            {
                cmd = cmd.Replace("!exists ", "");
                if (Filed.CheckFileExistanceFromRelative(cmd))
                {
                    sr = new SyncResponse(arg, GetBytesFromString("!Yes"));
                }
                else
                {
                    sr = new SyncResponse(arg, GetBytesFromString("!No"));
                }
            }
            else if (cmd.Contains("!getFileDataList"))
            {
                cmd = cmd.Replace("!getFileDataList", "");
                sr  = new SyncResponse(arg, GetBytesFromString(GetFileList()));
            }
            else if (cmd.Contains("!sessiondone"))
            {
                cmd = cmd.Replace("!sessiondone", "");
                Filed.RecomputeHashesBasedOnModifiedStatus();
                FilerHashesIO.WriteHashesToFile(ts.hashDictionaryName, Filed);
                sr = new SyncResponse(arg, GetBytesFromString("!dd"));
                UIHandler.WriteLog("Session done!", Color.Green);
            }
            else if (cmd.Contains("!rm "))
            {
                cmd = cmd.Replace("!rm ", "");
                if (Filed.GetLocalFromRelative(cmd) != "?FileNotFound?")
                {
                    File.Delete(Filed.GetLocalFromRelative(cmd));
                    Filed.ChangeFileModifiedStatusByRelativePath(cmd, FileModifiedStatus.Deleted);
                }
                sr = new SyncResponse(arg, GetBytesFromString("!dd"));
            }
            else if (cmd.Contains("!getFileInfo "))
            {
                cmd = cmd.Replace("!getFileInfo ", "");
                FileInfo fi = Filed.GetLocalFileInfoFromRelative(cmd);
                sr = new SyncResponse(arg, GetBytesFromString($"{fi.Length}\n{fi.LastAccessTime.ToString()}"));
            }
            return(sr);
        }