public override ImageData Read(IBinaryStream stream, ImageMetaData info) { var header = HeaderBytes.Clone() as byte[]; using (var data = new StreamRegion(stream.AsStream, 8, true)) using (var pre = new PrefixStream(header, data)) using (var png = new BinaryStream(pre, stream.Name)) return(base.Read(png, info)); }
/// <summary> /// Copies the information from sourceInfo /// </summary> /// <param name="sourceInfo">The source info.</param> /// <param name="allFields">if set to <c>true</c> all fields are copied; otherwise the fields NrSignal, HeaderBytes and NrDataRecords are ignored.</param> public void CopyFrom(EdfFileInfoRaw sourceInfo, bool allFields = false) { EdfFileInfoRaw tmpInfo = sourceInfo.Clone() as EdfFileInfoRaw; if (tmpInfo == null) { throw new EdfException("Unable to clone file info."); } if (!allFields) { tmpInfo.NrSignals = NrSignals.ToString(); tmpInfo.HeaderBytes = HeaderBytes.ToString(); tmpInfo.NrDataRecords = NrDataRecords.ToString(); } FileInfoRecord = tmpInfo; Modified = true; }
private void WfNetworkThread() { HeaderBytes headbytes = PooledClassManager <HeaderBytes> .CreateClass(); DataBytes databytes = null; int recvedNum = 0; WfPacket sendPacket = null; int sendedNum = 0; while (m_Thread.IsAlive) { try { Thread.Sleep(10); if (m_ConnectState == EConnectState.PostConnecting) { databytes = null; recvedNum = 0; if (sendPacket != null) { sendPacket.DestroyClass(); sendPacket = null; } sendedNum = 0; ConnectServer(); } if (m_ConnectState == EConnectState.Connected) { string errorText = null; bool bWaiting = false; do { errorText = RecvAll(ref headbytes, ref databytes, ref recvedNum, ref bWaiting); }while (errorText == null && !bWaiting); if (errorText == null) { object privateLockObject; Monitor.Enter(privateLockObject = m_PrivateLockObject); try { while (m_SendQueue.Count > 0 || sendPacket != null) { if (sendPacket != null) { errorText = SendAll(sendPacket, ref sendedNum); if (sendedNum == sendPacket.GetOffset()) { sendPacket.DestroyClass(); sendPacket = null; } } if (errorText != null || sendPacket != null || m_SendQueue.Count <= 0) { break; } sendedNum = 0; sendPacket = m_SendQueue.Dequeue(); sendPacket.SetHeadLength(); } } finally { Monitor.Exit(privateLockObject); } } if (errorText != null) { Debug.LogError(errorText); object privateLockObject; Monitor.Enter(privateLockObject = m_PrivateLockObject); try { if (m_ConnectState != EConnectState.PostConnecting) { m_ConnectState = EConnectState.Disconnected; m_bNetStateChanged = true; //GameDll.CGameProcedure.s_EventManager.OnNetStateChanged.SafeInvoke((int)NetworkProtol.Tcp, (int)m_ConnectState); } } finally { Monitor.Exit(privateLockObject); } } } } catch (Exception ex) { Debug.LogError(ex.Message + ex.StackTrace); object privateLockObject; Monitor.Enter(privateLockObject = m_PrivateLockObject); try { if (m_ConnectState != EConnectState.PostConnecting) { m_ConnectState = EConnectState.Disconnected; m_bNetStateChanged = true; //GameDll.CGameProcedure.s_EventManager.OnNetStateChanged.SafeInvoke((int)NetworkProtol.Tcp, (int)m_ConnectState); } } finally { Monitor.Exit(privateLockObject); } } } m_Thread.Abort(); m_Thread.Join(); }
private string RecvAll(ref HeaderBytes msgHeader, ref DataBytes msgData, ref int nRecved, ref bool bWaiting) { string result; if (msgData == null) { SocketError socketError; int recveNum = m_Socket.Receive(msgHeader.Bytes, nRecved, msgHeader.Bytes.Length - nRecved, SocketFlags.None, out socketError); if (recveNum < 0) { result = "消息头小于0"; return(result); } if (socketError != SocketError.Success && socketError != SocketError.WouldBlock) { result = "网络错误:" + socketError.ToString(); m_ConnectState = EConnectState.PostConnecting; m_bNetStateChanged = true; //GameDll.CGameProcedure.s_EventManager.OnNetStateChanged.SafeInvoke((int)NetworkProtol.Tcp, (int)m_ConnectState); return(result); } if (recveNum == 0) { bWaiting = true; result = null; return(result); } nRecved += recveNum; if (nRecved == msgHeader.Bytes.Length) { ushort msgType = 0; ushort msgLength = 0; if (!WfPacket.ParseHeader(msgHeader.Bytes, ref msgType, ref msgLength)) { result = string.Concat(new object[] { "error ParseHeader type:", msgType, "len:", msgLength }); return(result); } if (msgLength < msgHeader.Bytes.Length) { result = string.Concat(new object[] { "error ParseHeader < msglen:", msgLength, "headerLength:", msgHeader.Bytes.Length }); return(result); } if (msgLength == msgHeader.Bytes.Length) { //这里虽然只有一个是一个很简单的只带有消息头的消息,例如心跳,但是我依然用了完整消息大小 msgData = PooledClassManager <DataBytes> .CreateClass(); msgData.SetBytes(msgLength + 1); Array.Copy(msgHeader.Bytes, 0, msgData.GetBytes(), 0, msgHeader.Bytes.Length); WfPacket item = PooledClassManager <WfPacket> .CreateClass(); item.InitRead(msgData); msgData = null; nRecved = 0; object privateLockObject; Monitor.Enter(privateLockObject = m_PrivateLockObject); try { m_RecvQueue.Enqueue(item); } finally { Monitor.Exit(privateLockObject); } } else { msgData = PooledClassManager <DataBytes> .CreateClass(); msgData.SetBytes(msgLength); Array.Copy(msgHeader.Bytes, 0, msgData.GetBytes(), 0, msgHeader.Bytes.Length); nRecved = msgHeader.Bytes.Length; } } } if (msgData != null) { SocketError socketError; int recveNum = m_Socket.Receive(msgData.GetBytes(), nRecved, msgData.GetLength() - nRecved, SocketFlags.None, out socketError); //Debug.Log("底层函数接收数据:" + socketError.ToString()); if (recveNum < 0) { result = "ReceiveData < 0"; return(result); } if (socketError != SocketError.Success && socketError != SocketError.WouldBlock) { result = "ReceiveData Failed"; return(result); } if (recveNum == 0) { bWaiting = true; result = null; return(result); } nRecved += recveNum; if (nRecved > msgData.GetLength()) { result = "ReceiveData IO error"; return(result); } if (nRecved == msgData.GetLength()) { WfPacket item = PooledClassManager <WfPacket> .CreateClass(); item.InitRead(msgData); msgData = null; nRecved = 0; object privateLockObject; Monitor.Enter(privateLockObject = m_PrivateLockObject); try { m_RecvQueue.Enqueue(item); } finally { Monitor.Exit(privateLockObject); } } else { bWaiting = true; } } result = null; return(result); }