Ejemplo n.º 1
0
Archivo: Form1.cs Proyecto: pr0gr4m/FM
        private void SendFile(string fileName)
        {
            FileInfo f        = new FileInfo(fileName);
            string   md5      = PUtility.CalculateMD5(fileName);
            FileMeta fileMeta = new FileMeta(
                f.Length,
                fileName,
                md5);

            fileMeta.Type = (int)PacketType.FileMeta;
            Packet.Serialize(fileMeta).CopyTo(this.sendBuf, 0);
            this.Send();

            Recv();
            ACK ack = (ACK)Packet.Deserialize(this.recvBuf);

            if (ack.isOK == false)
            {   // same name file
                ack = new ACK(false);
                if (MessageBox.Show("A same name already exists.\r\n\r\n" +
                                    "Do you want version control?", "FM", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    ack.isOK = true;
                }
                Packet.Serialize(ack).CopyTo(this.sendBuf, 0);
                this.Send();
            }

            if (f.Length != 0)
            {
                byte[] file = File.ReadAllBytes(fileName);

                this.stream.Write(file, 0, file.Length);
                this.stream.Flush();
            }

            Recv();

            ack = (ACK)Packet.Deserialize(this.recvBuf);
            if (ack.isOK)
            {
                //MessageBox.Show("성공적으로 업로드하였습니다!");
            }
            else
            {
                MessageBox.Show("파일 업로드 실패");
            }
        }
Ejemplo n.º 2
0
Archivo: Form1.cs Proyecto: pr0gr4m/FM
        private void btnDownload_Click(object sender, EventArgs e)
        {
            if (listServer.SelectedItems[0].Tag.ToString() == "F")
            {
                RecvFile(servFile);
            }
            else if (listServer.SelectedItems[0].Tag.ToString() == "D")
            {
                FileMeta finfo = new FileMeta(0, servFile, "");
                finfo.Type = (int)PacketType.ReqDir;
                Packet.Serialize(finfo).CopyTo(this.sendBuf, 0);
                this.Send();
                RecvFile(servFile + ".tmp.zip");
                PUtility.ExtractDirectoryTmp(dirPath + "\\" + Path.GetFileName(servFile + ".tmp.zip"));
                File.Delete(dirPath + "\\" + Path.GetFileName(servFile + ".tmp.zip"));
            }
            var item = viewClient.SelectedNode;

            viewClient.SelectedNode = null;
            viewClient.SelectedNode = item;
        }
Ejemplo n.º 3
0
Archivo: Form1.cs Proyecto: pr0gr4m/FM
        private void btnUpload_Click(object sender, EventArgs e)
        {
            if (listClient.SelectedItems[0].Tag.ToString() == "F")
            {
                SendFile(filePath);
            }
            else if (listClient.SelectedItems[0].Tag.ToString() == "D")
            {
                FileMeta finfo = new FileMeta(0, fdirPath + ".tmp.zip", "");
                finfo.Type = (int)PacketType.SendDir;
                Packet.Serialize(finfo).CopyTo(this.sendBuf, 0);
                this.Send();
                PUtility.CompressDirectoryTmp(fdirPath);
                SendFile(fdirPath + ".tmp.zip");
                File.Delete(fdirPath + ".tmp.zip");
            }
            var item = viewServer.SelectedNode;

            viewServer.SelectedNode = null;
            viewServer.SelectedNode = item;
        }
Ejemplo n.º 4
0
    // Use this for initialization
    void Start()
    {
        PhysicsDebugger.GizmoPosScale = GizmoPosScale;
        PhysicsDebugger.GizmoScale    = GizmoScale;

        //Initialize variables
        traversalShader.SetFloat("radius", diameter / 2);
        traversalShader.SetFloat("speed", speed);
        traversalShader.SetFloat("gravity", gravityMul);
        traversalShader.SetVector("gravityVec", gravityVec);
        traversalShader.SetFloat("angularSpeed", angularSpeed);
        traversalShader.SetFloat("DeltaTime", Time.deltaTime / integrationStep);
        //Setup buffers
        int particleStructSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(particle));
        int nodeStructSize     = System.Runtime.InteropServices.Marshal.SizeOf(typeof(internalNode));

        leafNodeBuffer             = new ComputeBuffer(count, nodeStructSize, ComputeBufferType.Default);
        boundingLeafNodeBuffer     = new ComputeBuffer(count, nodeStructSize, ComputeBufferType.Default);
        internalNodeBuffer         = new ComputeBuffer(count - 1, nodeStructSize, ComputeBufferType.Default);
        boundingInternalNodeBuffer = new ComputeBuffer(count - 1, nodeStructSize, ComputeBufferType.Default);
        inputcomputeBuffer         = new ComputeBuffer(count, particleStructSize, ComputeBufferType.Default);
        mergeOutputBuffer          = new ComputeBuffer(count, particleStructSize, ComputeBufferType.Default);
        argsBuffer          = new ComputeBuffer(1, args.Length * sizeof(uint), ComputeBufferType.IndirectArguments);
        AABBParentIdsBuffer = new ComputeBuffer(count, sizeof(int), ComputeBufferType.Default);
        //Apply buffer for instanced mesh drawing
        instanceMaterial.SetBuffer("positionBuffer", inputcomputeBuffer);
        uint numIndices = (particleMesh != null) ? (uint)particleMesh.GetIndexCount(0) : 0;

        args[0] = numIndices;
        args[1] = (uint)count;
        argsBuffer.SetData(args);
        cachedInstanceCount = count;

        //Generate Initial Particle Values
        particle[] points = PUtility.GetParticlePoints(count, size, diameter / 2, mass);
        inputcomputeBuffer.SetData(points);
        //Apply
        //Get kernels
        mainKernelHandler             = traversalShader.FindKernel("CSMain");
        mortonKernelHandler           = traversalShader.FindKernel("CSAssignMortonIDs");
        treeConstructionKernelhandler = bvhShader.FindKernel("CSCreateBVH");
        boundingSphereKernelHandler   = AABBShader.FindKernel("CSGenerateBoundingBoxes");
        mergeKernelHandler            = mergeShader.FindKernel("Merge");
        sortingKernelHandler          = sortShader.FindKernel("RadixSort");
        writeNodeDataKernelHandler    = traversalShader.FindKernel("WriteNodeData");
        traversalKernelKernelHandler  = traversalShader.FindKernel("TraversalKernel");
        unionKerneHandler             = AABBShader.FindKernel("CSUnion");
        //Create MortonIDs
        traversalShader.SetBuffer(mortonKernelHandler, "inputPoints", inputcomputeBuffer);
        traversalShader.Dispatch(mortonKernelHandler, count / groupSize, 1, 1);
        Debug.Log("Dispatched morton kernel");
        //Sort & Merge IDs
        sortShader.SetBuffer(sortingKernelHandler, "Data", inputcomputeBuffer);
        mergeShader.SetBuffer(mergeKernelHandler, "inputPoints", inputcomputeBuffer);
        mergeShader.SetBuffer(mergeKernelHandler, "mergeOutputBuffer", mergeOutputBuffer);

        traversalShader.SetBuffer(writeNodeDataKernelHandler, "internalNodes", internalNodeBuffer);
        traversalShader.SetBuffer(writeNodeDataKernelHandler, "leafNodes", leafNodeBuffer);
        traversalShader.SetBuffer(writeNodeDataKernelHandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        traversalShader.SetBuffer(writeNodeDataKernelHandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        traversalShader.SetBuffer(writeNodeDataKernelHandler, "mergeOutputBuffer", mergeOutputBuffer);

        //Create Tree
        bvhShader.SetBuffer(treeConstructionKernelhandler, "inputPoints", inputcomputeBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "internalNodes", internalNodeBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "leafNodes", leafNodeBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "mergeOutputBuffer", mergeOutputBuffer);
        bvhShader.SetBuffer(treeConstructionKernelhandler, "parentIds", AABBParentIdsBuffer);

        Debug.Log("Dispatched tree contruction kernel");


        //Create bounding sphere
        AABBShader.SetBuffer(boundingSphereKernelHandler, "internalNodes", internalNodeBuffer);
        AABBShader.SetBuffer(boundingSphereKernelHandler, "mergeOutputBuffer", mergeOutputBuffer);
        AABBShader.SetBuffer(boundingSphereKernelHandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        AABBShader.SetBuffer(boundingSphereKernelHandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        AABBShader.SetBuffer(boundingSphereKernelHandler, "parentIds", AABBParentIdsBuffer);

        AABBShader.SetBuffer(unionKerneHandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        AABBShader.SetBuffer(unionKerneHandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        AABBShader.SetBuffer(unionKerneHandler, "parentIds", AABBParentIdsBuffer);


        traversalShader.SetBuffer(traversalKernelKernelHandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        traversalShader.SetBuffer(traversalKernelKernelHandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        traversalShader.SetBuffer(traversalKernelKernelHandler, "mergeOutputBuffer", mergeOutputBuffer);

        //Apply Movement
        traversalShader.SetBuffer(mainKernelHandler, "boundingInternalNodes", boundingInternalNodeBuffer);
        traversalShader.SetBuffer(mainKernelHandler, "boundingLeafNodes", boundingLeafNodeBuffer);
        traversalShader.SetBuffer(mainKernelHandler, "mergeOutputBuffer", mergeOutputBuffer);
        traversalShader.SetBuffer(mainKernelHandler, "inputPoints", inputcomputeBuffer);

        //CommandBuffer cm = new CommandBuffer();
        //CommandBuffer cm2 = new CommandBuffer();
        //CommandBuffer cm3 = new CommandBuffer();
        //CommandBuffer cm4 = new CommandBuffer();
        //
        //
        //cm.DispatchCompute(sortShader, sortingKernelHandler, count / groupSize, 1, 1);
        //cm.DispatchCompute(mergeShader, mergeKernelHandler, count / groupSize, 1, 1);
        //cm2.DispatchCompute(traversalShader, writeNodeDataKernelHandler, count / groupSize, 1, 1);
        //cm2.DispatchCompute(bvhShader, treeConstructionKernelhandler, count / groupSize, 1, 1);
        //cm2.DispatchCompute(AABBShader, boundingSphereKernelHandler, count / groupSize, 1, 1);
        //cm4.DispatchCompute(traversalShader, traversalKernelKernelHandler, count / groupSize, 1, 1);
        //cm4.DispatchCompute(traversalShader, mainKernelHandler, count / groupSize, 1, 1);
        //
        //Camera.main.AddCommandBuffer(CameraEvent.BeforeSkybox, cm);
        //Camera.main.AddCommandBuffer(CameraEvent.BeforeSkybox, cm2);
        //Camera.main.AddCommandBuffer(CameraEvent.AfterSkybox, cm4);
        //Camera.main.AddCommandBuffer(CameraEvent.AfterSkybox, cm4);
    }
Ejemplo n.º 5
0
        public void Run()
        {
            // Connect
            try
            {
                this.listener = new TcpListener(PUtility.PORT_NUM);
                this.listener.Start();

                this.Invoke(new MethodInvoker(delegate()
                {
                    txtLog.AppendText("waiting for client access...\r\n");
                }));

                TcpClient client = this.listener.AcceptTcpClient();
                this.stream = client.GetStream();
                this.Invoke(new MethodInvoker(delegate()
                {
                    txtLog.AppendText("Client Access!!\r\n");
                }));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

            InitCase();
            SetCase();

            // IO
            while (true)
            {
                if (Recv() == 0)
                {
                    return;
                }

                Packet packet = (Packet)Packet.Deserialize(this.recvBuf);

                switch ((int)packet.Type)
                {
                case (int)PacketType.FileMeta:
                    HandleFileMeta();
                    break;

                case (int)PacketType.SendDir:
                    FileMeta finfo = (FileMeta)Packet.Deserialize(this.recvBuf);
                    Recv();
                    HandleFileMeta();
                    PUtility.ExtractDirectoryTmp(pathCur +
                                                 Path.GetFileName(finfo.fileName));
                    File.Delete(pathCur +
                                Path.GetFileName(finfo.fileName));
                    break;

                case (int)PacketType.ReqDirList:
                    HandleReqDirList();
                    break;

                case (int)PacketType.ReqFileList:
                    HandleReqFileList();
                    break;

                case (int)PacketType.ReqFile:
                    HandleReqFile();
                    break;

                case (int)PacketType.ReqDir:
                    FileMeta dinfo = (FileMeta)Packet.Deserialize(this.recvBuf);
                    PUtility.CompressDirectoryTmp(pathCur + dinfo.fileName);
                    Recv();
                    HandleReqFile();
                    File.Delete(pathCur + dinfo.fileName + ".tmp.zip");
                    break;
                }
            }
        }
Ejemplo n.º 6
0
 private void FMServer_Load(object sender, EventArgs e)
 {
     txtIP.Text = PUtility.GetLocalIP();
     SetDirectory();
 }
Ejemplo n.º 7
0
        private void HandleFileMeta()
        {
            FileMeta fileMeta = (FileMeta)Packet.Deserialize(this.recvBuf);

            this.Invoke(new MethodInvoker(delegate()
            {
                txtLog.AppendText("File Name : " + fileMeta.fileName + "\r\n");
                txtLog.AppendText("File Hash : " + fileMeta.md5Hash + "\r\n");
            }));

            ACK ack = new ACK();

            ack.Type = (int)PacketType.ACK;
            if (File.Exists(pathCur + Path.GetFileName(fileMeta.fileName)))
            {
                ack.isOK = false;
                Packet.Serialize(ack).CopyTo(this.sendBuf, 0);
                this.Send();

                Recv();
                ack = (ACK)Packet.Deserialize(this.recvBuf);

                if (ack.isOK == true)
                {
                    // version
                    try
                    {
                        PUtility.CompressWithVersion(pathCur + Path.GetFileName(fileMeta.fileName));
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
            else
            {
                Packet.Serialize(ack).CopyTo(this.sendBuf, 0);
                this.Send();
            }

            FileStream fs = File.Open(pathCur +
                                      Path.GetFileName(fileMeta.fileName), FileMode.Create);
            BinaryWriter writer = new BinaryWriter(fs);

            int  nRecv   = 0;
            long nRemain = fileMeta.fileLength;

            byte[] buff = new byte[PUtility.BUF_LEN];
            try
            {
                if (fileMeta.fileLength != 0)
                {
                    while ((nRecv = stream.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, nRecv);
                        writer.Flush();
                        nRemain -= nRecv;
                        if (nRemain <= 0)
                        {
                            break;
                        }
                    }
                }
            }
            catch
            {
                ACK ackFail = new ACK(false);
                ackFail.Type = (int)PacketType.ACK;

                Packet.Serialize(ackFail).CopyTo(this.sendBuf, 0);
                this.Send();
            }
            finally
            {
                writer.Close();
                fs.Close();
            }

            string md5 = PUtility.CalculateMD5(pathCur +
                                               Path.GetFileName(fileMeta.fileName));

            if (String.Compare(md5, fileMeta.md5Hash) == 0)
            {
                ACK ackSuc = new ACK();
                ackSuc.Type = (int)PacketType.ACK;

                Packet.Serialize(ackSuc).CopyTo(this.sendBuf, 0);
                this.Send();

                File.WriteAllText(pathCur +
                                  Path.GetFileNameWithoutExtension(fileMeta.fileName) +
                                  ".gpg", md5);
            }
            else
            {
                ACK ackFail = new ACK(false);
                ackFail.Type = (int)PacketType.ACK;

                Packet.Serialize(ackFail).CopyTo(this.sendBuf, 0);
                this.Send();
            }
        }