HandleResult OnReceive(TcpPullClient sender, int length) { // 数据到达了 // 需要长度 int required = pkgInfo.Length; // 剩余大小 int remain = length; while (remain >= required) { IntPtr bufferPtr = IntPtr.Zero; try { remain -= required; bufferPtr = Marshal.AllocHGlobal(required); if (sender.Fetch(bufferPtr, required) == FetchResult.Ok) { if (pkgInfo.IsHeader == true) { PkgHeader header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader)); // 调试信息 Console.WriteLine("[Client] head -> Id: {0}, BodySize: {1}\r\n", header.Id, header.BodySize); required = header.BodySize; } else { // 调试信息 string recvString = Marshal.PtrToStringAnsi(bufferPtr, required); Console.WriteLine("[Client] body -> text: {0}\r\n", recvString); required = pkgHeaderSize; } AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, pkgInfo.Length)); pkgInfo.IsHeader = !pkgInfo.IsHeader; pkgInfo.Length = required; } } catch { return(HandleResult.Error); } finally { if (bufferPtr != IntPtr.Zero) { Marshal.FreeHGlobal(bufferPtr); bufferPtr = IntPtr.Zero; } } } return(HandleResult.Ok); }
public Pull(int receiveBufferSize, string ip, int port) { client = new TcpPullClient(receiveBufferSize); client.OnConnect += Client_OnConnect; client.OnReceive += Client_OnReceive; client.OnSend += Client_OnSend; client.OnClose += Client_OnClose; client.Connect(ip, port); }
private static HandleResult HClientOnOnReceive(TcpPullClient sender, int length) { var required = PkgInfo.Length; var remain = length; while (remain >= required) { var bufferPtr = IntPtr.Zero; try { remain -= required; bufferPtr = Marshal.AllocHGlobal(required); if (sender.Fetch(bufferPtr, required) == FetchResult.Ok) { if (PkgInfo.IsHeader) { var header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader)); required = header.BodySize; } else { var buffer = new byte[required]; Marshal.Copy(bufferPtr, buffer, 0, required); Recv.Enqueue(Decompress(buffer).ToList()); required = PkgHeaderSize; } PkgInfo.IsHeader = !PkgInfo.IsHeader; PkgInfo.Length = required; } } catch { return(HandleResult.Error); } finally { if (bufferPtr != IntPtr.Zero) { Marshal.FreeHGlobal(bufferPtr); } } } return(HandleResult.Ok); }
private HandleResult client_OnReceive(TcpPullClient sender, int length) { int required = length; string recievedStr = ""; IntPtr bufferPtr = IntPtr.Zero; try { //remain -= required; bufferPtr = Marshal.AllocHGlobal(required); if (sender.Fetch(bufferPtr, required) == FetchResult.Ok) { // 回发数据 byte[] sendBytes = new byte[length]; Marshal.Copy(bufferPtr, sendBytes, 0, sendBytes.Length); //recievedStr = Encoding.Default.GetString(sendBytes);//00失败 01成功 recievedStr = ReturnStr16(sendBytes); str = recievedStr; //ShowMSG(string.Format("收到信息,内容:{0},长度:{1}", recievedStr, length)); return(HandleResult.Ok); } } catch { return(HandleResult.Error); } return(HandleResult.Ok); }
private static HandleResult Client_OnReceive(TcpPullClient sender, int length) { if (!Directory.Exists(dwgPath)) { Directory.CreateDirectory(dwgPath); } zipFile = dwgPath + Path.GetFileNameWithoutExtension(dwgFile) + ".zip"; try { #region 收数据 // 需要长度 int required = pkgInfo.Length; // 剩余大小 int remain = length; while (remain >= required) { IntPtr bufferPtr = IntPtr.Zero; try { remain -= required; bufferPtr = Marshal.AllocHGlobal(required); if (client.Fetch(bufferPtr, required) == FetchResult.Ok) { if (pkgInfo.IsHeader == true) { PkgHeader header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader)); required = header.BodySize; } else { //intptr转byte[] byte[] bytes = new byte[required]; Marshal.Copy(bufferPtr, bytes, 0, required); using (var fs = new FileStream(zipFile, FileMode.Create)) { fs.Write(bytes, 0, bytes.Length); fs.Close(); } required = pkgHeaderSize; DwgUtils.UnZip(zipFile, dwgPath, "123456"); DwgUtils.renameFile(dwgPath); } // 在后面赋值,因为前面需要用到pkgInfo.Length pkgInfo.IsHeader = !pkgInfo.IsHeader; pkgInfo.Length = required; if (client.SetExtra(pkgInfo) == false) { return(HandleResult.Error); } } } catch { return(HandleResult.Error); } finally { if (bufferPtr != IntPtr.Zero) { Marshal.FreeHGlobal(bufferPtr); bufferPtr = IntPtr.Zero; } if (File.Exists(dwgPath + Path.GetFileNameWithoutExtension(dwgFile) + "_G.json")) { insertData(dwgPath + Path.GetFileNameWithoutExtension(dwgFile) + "_G.json"); Console.WriteLine("succeed"); System.Diagnostics.Process.GetCurrentProcess().Kill(); } } } #endregion } catch (Exception ex) { Console.WriteLine(ex); } return(HandleResult.Ok); }
private static HandleResult Client_OnReceive(TcpPullClient sender, int length) { #region 收数据 // 需要长度 int required = pkgInfo.Length; // 剩余大小 int remain = length; while (remain >= required) { IntPtr bufferPtr = IntPtr.Zero; try { remain -= required; bufferPtr = Marshal.AllocHGlobal(required); if (client.Fetch(bufferPtr, required) == FetchResult.Ok) { if (pkgInfo.IsHeader == true) { PkgHeader header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader)); required = header.BodySize; } else { //intptr转byte[] byte[] bytes = new byte[required]; Marshal.Copy(bufferPtr, bytes, 0, required); using (var fs = new FileStream(jpgFile, FileMode.Create)) { fs.Write(bytes, 0, bytes.Length); fs.Close(); } required = pkgHeaderSize; } // 在后面赋值,因为前面需要用到pkgInfo.Length pkgInfo.IsHeader = !pkgInfo.IsHeader; pkgInfo.Length = required; if (client.SetExtra(pkgInfo) == false) { return(HandleResult.Error); } } } catch { return(HandleResult.Error); } finally { if (bufferPtr != IntPtr.Zero) { Marshal.FreeHGlobal(bufferPtr); bufferPtr = IntPtr.Zero; } } } #endregion if (File.Exists(jpgFile)) { Console.WriteLine("succeed"); System.Diagnostics.Process.GetCurrentProcess().Kill(); } return(HandleResult.Ok); }