/// <summary> /// Handles when Read is completed /// </summary> /// <param name="result">AsyncResult</param> private void OnReadComplete(IAsyncResult result) { IpcClient pipeInst = (IpcClient )result.AsyncState; int readByte = 0; byte[] readBuffer = null; try { readByte = pipeInst.m_pipeHandle.EndRead(result); readBuffer = m_readBuffer.ToArray(); } catch (System.Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); Disconnect(); return; } try { pipeInst.m_pipeHandle.BeginRead(pipeInst.m_readBuffer, 0, pipeInst.m_options.m_numOfReadBytes, OnReadComplete, pipeInst); } catch (System.Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); Disconnect(); } pipeInst.m_options.m_callBackObj.OnReadComplete(pipeInst, readBuffer, readByte); }
/// <summary> /// Handles when Write is completed /// </summary> /// <param name="result">AsyncResult</param> private void OnWriteComplete(IAsyncResult result) { IpcClient pipeInst = (IpcClient)result.AsyncState; try { pipeInst.m_pipeHandle.EndWrite(result); } catch (System.Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); Disconnect(); pipeInst.m_options.m_callBackObj.OnWriteComplete(pipeInst, IpcWriteStatus.FAIL_WRITE_FAILED); return; } lock (pipeInst.m_writeQueue) { if (pipeInst.m_writeQueue.Count > 0) { PipeWriteElem elem = pipeInst.m_writeQueue.Dequeue(); if (pipeInst.m_writeQueue.Count() > 0) { PipeWriteElem nextElem = pipeInst.m_writeQueue.Dequeue(); try { m_pipeHandle.BeginWrite(nextElem.m_data, nextElem.m_offset, nextElem.m_dataSize, OnWriteComplete, this); } catch (System.Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); pipeInst.m_options.m_callBackObj.OnWriteComplete(pipeInst, IpcWriteStatus.SUCCESS); Disconnect(); pipeInst.m_options.m_callBackObj.OnWriteComplete(pipeInst, IpcWriteStatus.FAIL_WRITE_FAILED); return; } } pipeInst.m_options.m_callBackObj.OnWriteComplete(pipeInst, IpcWriteStatus.SUCCESS); } } }