Exemplo n.º 1
0
        public override int Read(byte[] buffer, int offset, int count)
        {
            int readParam = (int)readMode;

            if (SharedMemNative.shmemchain_get_last_error() != -100)
            {
                Log.AddMessage("Shmem Error: " + SharedMemNative.shmemchain_get_last_error() + " " + SharedMemNative.shmemchain_get_last_errorcode());
            }

            /* dynamic and time limited modes have the timeout in 100ms steps as parameter */
            if (readMode == eReadMode.Dynamic || readMode == eReadMode.TimeLimited || readMode == eReadMode.TimeLimitedNoPartial)
            {
                readParam |= ((readTimeout + 99) / 100);
            }

            /* directly read into buffer */
            if (offset == 0)
            {
                return((int)SharedMemNative.shmemchain_read_data(shmemID, buffer, (uint)count, readParam));
            }

            /* use a temporary buffer for writing at offset */
            byte[] tmpBuffer = new byte[count];
            int    ret       = (int)SharedMemNative.shmemchain_read_data(shmemID, tmpBuffer, (uint)count, readParam);

            Array.Copy(tmpBuffer, 0, buffer, offset, count);
            return(ret);
        }
Exemplo n.º 2
0
 public override void Flush()
 {
     SharedMemNative.shmemchain_read_data(shmemID, null, 0, SharedMemNative.MODE_FLUSH);
 }