Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }