//=================================================================================== public CONNECT_SHORT_HEADER PrepareShortHeader(uint msg_id) { CONNECT_SHORT_HEADER Header = new CONNECT_SHORT_HEADER(); Header.msg_id = msg_id; Header.ProcessId = ProcessId; Header.tickCount = Kernel32.GetTickCount(); Header.RandomId = random.Next(0, 100000); Header.ClientName = StringToByte(ClientName, Global.MAX_CLIENTNAME_LENGTH, Encoding.ASCII); return(Header); }
//=================================================================================== public bool SendMsg <T>(uint msg_id, T Data) { bool ret = true; int TransmitMsg_size = 0; byte[] TransmitMsg = null; int sizeHeader = 0; int sizeT = Marshal.SizeOf(typeof(T)); IntPtr intptr = IntPtr.Zero; if (mode == ConnectionMode.OTHER_COMPUTER) { sizeHeader = Marshal.SizeOf(typeof(CONNECT_HEADER)); TransmitMsg_size = sizeHeader + sizeT; TransmitMsg = new byte[TransmitMsg_size]; CONNECT_HEADER Header = PrepareHeader(msg_id); intptr = Marshal.AllocHGlobal(TransmitMsg_size); // place for (CONNECT_HEADER) header + T data Marshal.StructureToPtr(Header, intptr, true); } else { sizeHeader = Marshal.SizeOf(typeof(CONNECT_SHORT_HEADER)); TransmitMsg_size = sizeHeader + sizeT; TransmitMsg = new byte[TransmitMsg_size]; CONNECT_SHORT_HEADER Header = PrepareShortHeader(msg_id); intptr = Marshal.AllocHGlobal(TransmitMsg_size); // place for (CONNECT_SHORT_HEADER) header + T data Marshal.StructureToPtr(Header, intptr, true); } Marshal.StructureToPtr(Data, intptr + sizeHeader, true); Marshal.Copy(intptr, TransmitMsg, 0, TransmitMsg_size); Marshal.FreeHGlobal(intptr); ret = Send(TransmitMsg); return(ret); }