272 lines
15 KiB
C#
272 lines
15 KiB
C#
using System;
|
|
using System.CodeDom;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.Remoting.Messaging;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using SystemX.Common.Archive;
|
|
using SystemX.Common.Serialization;
|
|
using SystemX.Net.BaseProtocol;
|
|
using static SystemX.Net.Platform.Common.Util.LogMessage;
|
|
|
|
|
|
namespace SystemX.Common
|
|
{
|
|
public static partial class XCommons
|
|
{
|
|
public static T ByteStreamToSpecialObject<T>(BASE_PROTOCOL.PROTOCOL_CODE GET_CODE, int iSize, byte[] MarshalByteStream)
|
|
{
|
|
byte[] getDataByte = new byte[1];
|
|
byte[] getRawByte = new byte[iSize - PAD_SIZE];
|
|
|
|
int iRawDataSize;
|
|
|
|
object getObj = null;
|
|
|
|
try
|
|
{
|
|
try
|
|
{
|
|
Array.Copy(MarshalByteStream, HEAD_SIZE, getRawByte, 0, iSize - PAD_SIZE);
|
|
|
|
HEADER_PACKET GetHeaderPacket = new HEADER_PACKET();
|
|
int iHeadLeng = Marshal.SizeOf(GetHeaderPacket);
|
|
byte[] ucHeadBytes = new byte[iHeadLeng];
|
|
Array.Copy(getRawByte, 0, ucHeadBytes, 0, iHeadLeng);
|
|
iRawDataSize = getRawByte.Count();
|
|
GetHeaderPacket = (HEADER_PACKET)SystemXNetSerialization.RawDeSerialize(ucHeadBytes, GetHeaderPacket.GetType());
|
|
|
|
getDataByte = new byte[GetHeaderPacket.uiDataLength];
|
|
|
|
object getPacket = SystemXNetSerialization.SelectPacket(GetHeaderPacket.uiDataLength);
|
|
if (getPacket == null) throw new Exception("SystemXNetSerialization.SelectPacket Failed.");
|
|
int iBodySize = Marshal.SizeOf(getPacket);
|
|
byte[] ucBodyArray = new byte[iBodySize];
|
|
Array.Copy(getRawByte, iHeadLeng, ucBodyArray, 0, iBodySize); // iRawDataSize - iHeadLeng);
|
|
|
|
getPacket = Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType()), getPacket.GetType());
|
|
getPacket = SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType());
|
|
|
|
Array.Copy((byte[])getPacket.GetType().GetMethod("Data").Invoke(getPacket, null), getDataByte, GetHeaderPacket.uiDataLength);
|
|
|
|
byte[] ucSpecialObjArray = XDataArchive.DecompressDeflateByteToByte(getDataByte);
|
|
|
|
if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.CONNECT_STATE)
|
|
{
|
|
PING_PACKET PingPacket = new PING_PACKET();
|
|
PingPacket = (PING_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, PingPacket.GetType()), PingPacket.GetType());
|
|
PingPacket = (PING_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, PingPacket.GetType());
|
|
|
|
getObj = PingPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.MIDDLEWARE_MESSAGE)
|
|
{
|
|
MESSAGE_PACKET MessagePacket = new MESSAGE_PACKET();
|
|
MessagePacket = (MESSAGE_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, MessagePacket.GetType()), MessagePacket.GetType());
|
|
MessagePacket = (MESSAGE_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, MessagePacket.GetType());
|
|
|
|
getObj = MessagePacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.HOST_INFO_CHECK)
|
|
{
|
|
SYSTEM_HOST_PACKET HostInfoPacket = new SYSTEM_HOST_PACKET();
|
|
HostInfoPacket = (SYSTEM_HOST_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, HostInfoPacket.GetType()), HostInfoPacket.GetType());
|
|
HostInfoPacket = (SYSTEM_HOST_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, HostInfoPacket.GetType());
|
|
|
|
getObj = HostInfoPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.SYNC_TIME_SERVER)
|
|
{
|
|
TIME_PACKET timePacket = new TIME_PACKET();
|
|
timePacket = (TIME_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, timePacket.GetType()), timePacket.GetType());
|
|
timePacket = (TIME_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, timePacket.GetType());
|
|
|
|
getObj = timePacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.ETC)
|
|
{
|
|
USER_PACKET UserDataPacket = new USER_PACKET();
|
|
UserDataPacket = (USER_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, UserDataPacket.GetType()), UserDataPacket.GetType());
|
|
UserDataPacket = (USER_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, UserDataPacket.GetType());
|
|
|
|
getObj = UserDataPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.PROCESS_QUERY)
|
|
{
|
|
PROCESS_PACKET ProcessDataPacket = new PROCESS_PACKET();
|
|
ProcessDataPacket = (PROCESS_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, ProcessDataPacket.GetType()), ProcessDataPacket.GetType());
|
|
ProcessDataPacket = (PROCESS_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, ProcessDataPacket.GetType());
|
|
|
|
getObj = ProcessDataPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.SYSTEM_QUERY)
|
|
{
|
|
QUERY_PACKET SystemQueryPacket = new QUERY_PACKET();
|
|
SystemQueryPacket = (QUERY_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, SystemQueryPacket.GetType()), SystemQueryPacket.GetType());
|
|
SystemQueryPacket = (QUERY_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, SystemQueryPacket.GetType());
|
|
|
|
getObj = SystemQueryPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.USER_QUERY)
|
|
{
|
|
QUERY_PACKET SystemQueryPacket = new QUERY_PACKET();
|
|
SystemQueryPacket = (QUERY_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, SystemQueryPacket.GetType()), SystemQueryPacket.GetType());
|
|
SystemQueryPacket = (QUERY_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, SystemQueryPacket.GetType());
|
|
|
|
getObj = SystemQueryPacket;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.TRANSFER_RESULT)
|
|
{
|
|
TRANSFER_PACKET TransferResult = new TRANSFER_PACKET();
|
|
TransferResult = (TRANSFER_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, TransferResult.GetType()), TransferResult.GetType());
|
|
TransferResult = (TRANSFER_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, TransferResult.GetType());
|
|
|
|
getObj = TransferResult;
|
|
}
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.INITILALIZE_INFO)
|
|
{
|
|
COMM_INFO_PACKET CommInfoPacket = new COMM_INFO_PACKET();
|
|
CommInfoPacket = (COMM_INFO_PACKET)Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, CommInfoPacket.GetType()), CommInfoPacket.GetType());
|
|
CommInfoPacket = (COMM_INFO_PACKET)SystemXNetSerialization.RawDeSerialize(ucSpecialObjArray, CommInfoPacket.GetType());
|
|
|
|
getObj = CommInfoPacket;
|
|
}
|
|
else
|
|
getObj = null;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
//throw new CommonPacketMarshalException("General packet marshalling failed.[SystemX.Common : SystemXNetCommons.ByteStreamToUserObject]");
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"General packet marshalling failed.[SystemX.Common : SystemXNetCommons.ByteStreamToUserObject]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
;//Until unused
|
|
}
|
|
|
|
return (T)Convert.ChangeType(getObj, typeof(T));
|
|
}
|
|
|
|
public static bool GetSimpleResponsResult(int iSize, byte[] CompressMarshalByteStream)
|
|
{
|
|
byte[] getDataByte = new byte[1];
|
|
byte[] getRawByte = new byte[iSize - PAD_SIZE];
|
|
|
|
bool bResponsResult = false;
|
|
|
|
try
|
|
{
|
|
try
|
|
{
|
|
Array.Copy(CompressMarshalByteStream, HEAD_SIZE, getRawByte, 0, iSize - PAD_SIZE);
|
|
|
|
HEADER_PACKET GetHeaderPacket = new HEADER_PACKET();
|
|
int iHeaderSize = Marshal.SizeOf(GetHeaderPacket);
|
|
byte[] ucHeaderMake = new byte[iHeaderSize];
|
|
GetHeaderPacket = (HEADER_PACKET)SystemXNetSerialization.RawDeSerialize(ucHeaderMake, GetHeaderPacket.GetType());
|
|
int iHeadLeng = Marshal.SizeOf(GetHeaderPacket);
|
|
|
|
byte[] ucHeadBytes = new byte[iHeadLeng];
|
|
|
|
Array.Copy(getRawByte, 0, ucHeadBytes, 0, iHeadLeng);
|
|
|
|
GetHeaderPacket = (HEADER_PACKET)SystemXNetSerialization.RawDeSerialize(ucHeadBytes, GetHeaderPacket.GetType());
|
|
|
|
getDataByte = new byte[GetHeaderPacket.uiDataLength];
|
|
|
|
object getPacket = SystemXNetSerialization.SelectPacket(GetHeaderPacket.uiDataLength);
|
|
if (getPacket == null) throw new Exception("SystemXNetSerialization.SelectPacket Failed.");
|
|
int iBodySize = Marshal.SizeOf(getPacket);
|
|
byte[] ucBodyArray = new byte[iBodySize];
|
|
Array.Copy(getRawByte, iHeadLeng, ucBodyArray, 0, iBodySize); // - iHeadLeng);
|
|
|
|
getPacket = Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType()), getPacket.GetType());
|
|
getPacket = SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType());
|
|
|
|
Array.Copy((byte[])getPacket.GetType().GetMethod("Data").Invoke(getPacket, null), getDataByte, GetHeaderPacket.uiDataLength);
|
|
|
|
bResponsResult = GetHeaderPacket.bResponsState;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
//throw new CommonPacketMarshalException("General packet marshalling failed.[SystemX.Common : SystemXNetCommons.ByteStreamToObject]");
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"General packet marshalling failed.[SystemX.Common : SystemXNetCommons.ByteStreamToObject]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
;//Until unused
|
|
}
|
|
|
|
return bResponsResult;
|
|
}
|
|
|
|
public static T ByteStreamToObject<T>(BASE_PROTOCOL.PROTOCOL_CODE GET_CODE, int iSize, byte[] CompressMarshalByteStream)
|
|
{
|
|
byte[] getDataByte = new byte[1];
|
|
byte[] getRawByte = new byte[iSize - PAD_SIZE];
|
|
|
|
object getObj = null;
|
|
|
|
try
|
|
{
|
|
try
|
|
{
|
|
Array.Copy(CompressMarshalByteStream, HEAD_SIZE, getRawByte, 0, iSize - PAD_SIZE);
|
|
|
|
HEADER_PACKET GetHeaderPacket = new HEADER_PACKET();
|
|
int iHeaderSize = Marshal.SizeOf(GetHeaderPacket);
|
|
byte[] ucHeaderMake = new byte[iHeaderSize];
|
|
GetHeaderPacket = (HEADER_PACKET)SystemXNetSerialization.RawDeSerialize(ucHeaderMake, GetHeaderPacket.GetType());
|
|
int iHeadLeng = Marshal.SizeOf(GetHeaderPacket);
|
|
|
|
byte[] ucHeadBytes = new byte[iHeadLeng];
|
|
|
|
Array.Copy(getRawByte, 0, ucHeadBytes, 0, iHeadLeng);
|
|
|
|
GetHeaderPacket = (HEADER_PACKET)SystemXNetSerialization.RawDeSerialize(ucHeadBytes, GetHeaderPacket.GetType());
|
|
|
|
getDataByte = new byte[GetHeaderPacket.uiDataLength];
|
|
|
|
object getPacket = SystemXNetSerialization.SelectPacket(GetHeaderPacket.uiDataLength);
|
|
if (getPacket == null) throw new Exception("SystemXNetSerialization.SelectPacket Failed.");
|
|
int iBodySize = Marshal.SizeOf(getPacket);
|
|
byte[] ucBodyArray = new byte[iBodySize];
|
|
Array.Copy(getRawByte, iHeadLeng, ucBodyArray, 0, iBodySize); // - iHeadLeng);
|
|
|
|
getPacket = Convert.ChangeType(SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType()), getPacket.GetType());
|
|
getPacket = SystemXNetSerialization.RawDeSerialize(ucBodyArray, getPacket.GetType());
|
|
|
|
Array.Copy((byte[])getPacket.GetType().GetMethod("Data").Invoke(getPacket, null), getDataByte, GetHeaderPacket.uiDataLength);
|
|
|
|
if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.FILE_TRANSFER)
|
|
getObj = getDataByte; //XDataArchive.DecompressDeflateByteToByte(getDataByte);
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.DATASET_TRANSEFER)
|
|
getObj = XDataArchive.DecompressByteToDataset(getDataByte);
|
|
else if (GET_CODE == BASE_PROTOCOL.PROTOCOL_CODE.RAW_SIZE)
|
|
getObj = getDataByte;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
//throw new CommonPacketMarshalException("General packet marshalling failed.[SystemX.Common : COMMON.ByteStreamToObject]");
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"General packet marshalling failed.[SystemX.Common : COMMON.ByteStreamToObject]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
;//Until unused
|
|
}
|
|
|
|
return (T)Convert.ChangeType(getObj, typeof(T));
|
|
}
|
|
}
|
|
}
|