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("파일 업로드 실패"); } }
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; }
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; }
// 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); }
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; } } }
private void FMServer_Load(object sender, EventArgs e) { txtIP.Text = PUtility.GetLocalIP(); SetDirectory(); }
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(); } }