private Revision retrieveServerMaster()
        {
            commandTransporter.Send(new BytePacket((byte)SyncerCommands.RequestMaster));
            var p = revisionTransporter.Receive();

            return(retrieveRevision(p.Guid));
        }
        internal int sendNextFilePart(int sendSize)
        {
            var buffer = getNextFilePart(sendSize);

            partTransporter.Send(new FilePartPacket {
                Data = buffer, Complete = !IsSendingFile()
            });

            if (!IsSendingFile())
            {
                // complete
                endTransporter.Send(sendingFilePacket);
            }
            return(buffer.Length);
        }
        public void SendFile(T packet, string filePath)
        {
            lock (this)
            {
                if (sendingFile != null)
                {
                    throw new InvalidOperationException("A file is already being sent!");
                }

                startTransporter.Send(new FileStartPacket());


                sendingFilePacket = packet;

                sendingFile  = new FileInfo(filePath);
                filePosition = 0;
                server.AddDownloadingClient(this);
            }
        }
        private Revision retrieveRevision(Guid guid)
        {
            var rev = sys.FindRevision(guid);

            if (rev != null)
            {
                return(rev);
            }

            requestRevisionTransporter.Send(new RevisionRequestPacket {
                Guid = guid
            });

            var p = revisionTransporter.Receive();

            rev              = new Revision();
            rev.Guid         = p.Guid;
            rev.Message      = rev.Message;
            rev.Parent       = retrieveRevision(p.Parent);
            rev.MergedParent = retrieveRevision(p.MergedParent);


            // Always 1 file in revision!!!
            for (; ;)
            {
                var fileP = fileTransporter.ReceiveFile();
                File.Move(fileP.CachedFilePath, sys.getFilePath(rev, fileP.Packet.Path));

                if (fileP.Packet.Complete)
                {
                    break;
                }
            }



            return(rev);
        }
 public void OnSave()
 {
     transporter.Send(new UserInputHandlerPacket("OnSave"));
 }