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); }
public override void Flush() { SharedMemNative.shmemchain_read_data(shmemID, null, 0, SharedMemNative.MODE_FLUSH); }