protected virtual void replyHandler <TSource, TSource2>(object sender, TcpIpEventArgs e, ref TSource inStr) { int threadID = System.Threading.Thread.CurrentThread.ManagedThreadId; lock (handlerLock) { try { if (hasRtn) { return; } byte[] bytPacketDatas = TCPUtility._Str2Packet(inStr); ushort iSeqNum = TCPUtility.PrcGetPacketSeqNum(bytPacketDatas); if (iSeqNum != e.iSeqNum) { return; } TSource2 tmpSXFY = (TSource2)TCPUtility._Packet2Str <TSource2>((byte[])e.objPacket, tcpipAgent.Name); recvStr = (Object)tmpSXFY; hasRtn = true; } catch (Exception ex) { //todo recode log } } }
//const UInt16 SeqNoBeginByte = 8; public void SendMessage <T>(T msgStructure) { byte[] bytPacketDatas; byte[] bytSendMsgDatas; //byte[] bytSeqNoDatas; //bytSeqNoDatas = BitConverter.GetBytes(getSendSeqNum()); bytPacketDatas = TCPUtility._Str2Packet(msgStructure); bytSendMsgDatas = TCPUtility.PrcCreateSendMessage_New(bytPacketDatas); LogCollection.TrxMsgInfo(TCPUtility.toStuctureString(msgStructure, Name, true)); Console.WriteLine("Send Data:{0}", TCPUtility.PrcConvBytes2HexStr(bytSendMsgDatas, bytSendMsgDatas.Length, " ")); //Array.Copy(bytSeqNoDatas, 0, bytSendMsgDatas, SeqNoBeginByte, bytSeqNoDatas.Length); Task taskSendMsg = null; switch (ConnectMode) { case TCPIP_AGENT_COMM_MODE.SERVER_MODE: taskSendMsg = session.SendAsync(bytSendMsgDatas); break; case TCPIP_AGENT_COMM_MODE.CLINET_MODE: taskSendMsg = ClientSession.SendAsync(bytSendMsgDatas); break; } taskSendMsg.Wait(); }
public void DecodReciveRawData(byte[] raw_data) { byte[] bytPacketDatas = null; int data_coune = raw_data.Length; int PacketID = 0; UInt16 SeqNum = 0; object objPacket = null; //while (data_coune >= LEN_MESSAGE_SIZE) //{ string result = TCPUtility.PrcConvBytes2HexStr(raw_data, raw_data.Length, " "); Console.WriteLine(reciveCount++); Console.WriteLine(result); // Check Message Header if ((raw_data[0] == '@') && (raw_data[1] == 'P') && (raw_data[2] == 'K') && (raw_data[3] == 'T')) { //bytPacketDatas = TCPUtility.PrcGetPacketFromMessage(raw_data); bytPacketDatas = TCPUtility.PrcGetPacketFromMessage_New(raw_data); PacketID = TCPUtility.PrcGetPacketID(bytPacketDatas); SeqNum = TCPUtility.PrcGetPacketSeqNum(bytPacketDatas); objPacket = bytPacketDatas; TcpIpEventArgs arg = new TcpIpEventArgs(PacketID, SeqNum, objPacket); onTcpIpReceive(PacketID, arg); dataSeqNoOrderToComfirm(PacketID, SeqNum); } //data_coune -= LEN_MESSAGE_SIZE; //Array.Copy(raw_data, LEN_MESSAGE_SIZE, raw_data, 0, data_coune); //} }
public void DecodReciveRawData_Google(byte[] raw_data) { byte[] bytPacketDatas = raw_data; UInt16 PacketID = 0; UInt16 SeqNum = 0; object objPacket = null; string result = TCPUtility.PrcConvBytes2HexStr(bytPacketDatas, bytPacketDatas.Length, " "); Console.WriteLine(reciveCount++); Console.WriteLine(result); unPackWrapperMsg(bytPacketDatas, out PacketID, out SeqNum, out objPacket); TcpIpEventArgs arg = new TcpIpEventArgs(PacketID, SeqNum, objPacket); onTcpIpReceive(PacketID, arg); dataSeqNoOrderToComfirm(PacketID, SeqNum); }
public ReturnCode sendRecv_Google <TSource, TSource2>(TSource inStr, out TSource2 outStr, out string rtnMsg, int timeoutMSec, int retryCnt) where TSource : IMessage <TSource> where TSource2 : IMessage <TSource2>, new() { int iPacketID = getPacketIDByGoogleMessage(inStr); ushort iSeqNum = 0; if (!tcpipAgent.ImsgStateMachine.IsInState(TcpIpAgent.E_Msg_STS.Idle)) { throw new TcpIpStateException(string.Format("The status is incorrect when sent.TcpIp name:{0} ,Pack ID:{1} ,crt state:{2}" , tcpipAgent.Name , iPacketID , tcpipAgent.ImsgStateMachine.State)); } int threadID = System.Threading.Thread.CurrentThread.ManagedThreadId; tcpipAgent.onMessageGenerated(); hasRtn = false; outStr = (TSource2)TCPUtility.GetDefault(typeof(TSource2)); EventHandler <TcpIpEventArgs> handler = null; rtnMsg = string.Empty; int iReplyPacketID = 0; switch (tcpipAgent.ConnectMode) { case TcpIpAgent.TCPIP_AGENT_COMM_MODE.SERVER_MODE: iReplyPacketID = iPacketID + 100; break; case TcpIpAgent.TCPIP_AGENT_COMM_MODE.CLINET_MODE: iReplyPacketID = iPacketID - 100; break; } try { handler = delegate(Object _sender, TcpIpEventArgs _e) { replyHandler_Google <TSource>(_sender, _e, ref inStr); }; tcpipAgent.addTcpIpReceivedHandler(iReplyPacketID, handler); int count = 0; do { Console.WriteLine(string.Format("Send begin ID:{0}", iPacketID)); tcpipAgent.onMessageSent(); bool is_success = this.SendGoogleMsg(inStr); if (!is_success) { rtnMsg = "Send message fail."; TcpIpExceptionEventArgs e = new TcpIpExceptionEventArgs(iPacketID, iSeqNum, inStr, rtnMsg); tcpipAgent.onErrorHappend(e); return(ReturnCode.SendDataFail); } Console.WriteLine(string.Format("Send success ID:{0}", iPacketID)); tcpipAgent.onWaitForReply(); SpinWait.SpinUntil(() => hasRtn, timeoutMSec); if (!hasRtn) { if (count++ >= retryCnt) { Console.WriteLine(string.Format("Replay timeout ID:{0}", iPacketID)); rtnMsg = string.Format("A response timeout occurred. retry count:{0}", count); TcpIpExceptionEventArgs e = new TcpIpExceptionEventArgs(iPacketID, iSeqNum, inStr, rtnMsg); tcpipAgent.onReplyTimeout(e); return(ReturnCode.Timeout); } Console.WriteLine(string.Format("Send aging ID:{0}, count:{1}", iPacketID, count)); } } while (!hasRtn); outStr = (TSource2)recvStr; tcpipAgent.onMessageSentCmp(); } catch (Exception ex) { rtnMsg = ex.ToString(); TcpIpExceptionEventArgs e = new TcpIpExceptionEventArgs(iPacketID, iSeqNum, inStr, rtnMsg); tcpipAgent.onErrorHappend(e); return(ReturnCode.SendDataFail); } finally { tcpipAgent.removeTcpIpReceivedHandler(iReplyPacketID, handler); tcpipAgent.onMessageSentFinish(); Console.WriteLine(string.Format("Send finish ID:{0}", iPacketID)); } return(ReturnCode.Normal); }