|
- using System;
- using System.IO;
-
- namespace JT809.Protocol.ProtocolPacket
- {
- public abstract class BufferedEntityBase : IBuffered, IBuffer
- {
- public byte[] Buffer { get; protected set; }
-
- public virtual byte[] ToBuffer()
- {
- using (var stream = new MemoryStream())
- {
- var writer = new BinaryWriter(stream);
- OnWriteToBuffer(writer);
- var reader = new BinaryReader(stream);
- stream.Seek(0, SeekOrigin.Begin);
- Buffer = reader.ReadBytes((int)stream.Length);//stream.GetBuffer();
- stream.Close();
- }
- return Buffer;
- }
-
- protected BufferedEntityBase(params object[] properties)
- {
- InitializeProperties(properties, 0);
- ToBuffer();
- }
-
- protected BufferedEntityBase(byte[] buffer)
- {
- Buffer = buffer;
- InitializePropertiesFromBuffer();
- }
-
- public static byte[] SetMatchBytes(byte[] bufferIn, int lengthMatch, byte mask = 0X00)
- {
- if (bufferIn.Length != lengthMatch)
- {
- var tempBuffer = new byte[lengthMatch];
- Array.ForEach(tempBuffer, b => b = mask);//TODO : Maybe mask error
- var copyLength = bufferIn.Length > lengthMatch ? lengthMatch : bufferIn.Length;
- Array.Copy(bufferIn, 0, tempBuffer, 0, copyLength);
- return tempBuffer;
- }
- return bufferIn;
- }
-
- protected abstract void InitializeProperties(object[] properties, int startIndex);
-
- protected abstract void OnInitializePropertiesFromReadBuffer(BinaryReader reader);
-
- protected virtual void InitializePropertiesFromBuffer()
- {
- using (var stream = new MemoryStream(Buffer))
- {
- var reader = new BinaryReader(stream);
- OnInitializePropertiesFromReadBuffer(reader);
- stream.Close();
- }
- }
-
- protected abstract void OnWriteToBuffer(BinaryWriter writer);
- }
- }
|