コード例 #1
0
        private void ReadCallback(UvStreamHandle streamHandle, int status, ref UvNative.uv_buf_t buf)
        {
            if (status > 0)
            {
                try
                {
                    MemorySegmentByteBuffer byteBuf = _byteBufProvider.WrapMemorySegment(buf.Memory, buf.Len);
                    byteBuf.SetWrite(status);

                    this.Receive(byteBuf);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    streamHandle.ReadStop();
                    streamHandle.Close();
                }
            }
            else if (status == 0)
            {
                // TODO:
                Console.WriteLine("ReadCallback. No data to read.");
            }
            else
            {
                string error = string.Format(
                    "Error #{0}. {1} {2}",
                    status,
                    Marshal.PtrToStringAnsi(UvNative.uv_err_name(status)),
                    Marshal.PtrToStringAnsi(UvNative.uv_strerror(status))
                    );
                // TODO:
                Console.WriteLine("ReadCallback. {0}.", error);
            }
        }
コード例 #2
0
//        private void WriteCallback(UnmanagedByteBuf byteBuf)
//        {
//            // TODO: обрабатывать статус с ошибкой.
//
//            byteBuf.Release();
//        }

        private void AllocCallback(
            UvStreamHandle streamHandle,
            int suggestedsize,
            out UvNative.uv_buf_t buf)
        {
            // Тут мы можем просто взять поинтер, без буфера. Все равно поинтер не потеряется и будет передан
            // в ReadCallback, где будет завернут в буфер.
            try
            {
                IntPtr dataPtr = _byteBufProvider.GetDefaultDataIntPtr(out int size);
                buf = new UvNative.uv_buf_t(dataPtr, size, PlatformApis.IsWindows);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                streamHandle.ReadStop();
                streamHandle.Close();

                buf = new UvNative.uv_buf_t();
            }
        }