//public static event Action<object> CmdParsed; public static void ReceiveData(byte[] data, SerialParseFunc serialParseFunc) { lock (SyncRoot) { ReadBuffer.AddRange(data); ParseCmd(serialParseFunc); } }
//public static event Action<object> CmdParsed; public static void ReceiveData(byte[] data, SerialParseFunc serialParseFunc) { lock (SyncRoot) { ReadBuffer.AddRange(data); ParseCmd(serialParseFunc); //if (ParseCmd(out cmdInfo, serialParseFunc)) //{ // //OnCmdParsed(cmdInfo); //} } }
//public static event Action<object> CmdParsed; public static void ReceiveData(byte[] data, SerialParseFunc serialParseFunc) { lock (SyncRoot) { // string temp = SerialClass.byteToHexStr(data); ReadBuffer.AddRange(data); ParseCmd(serialParseFunc); ClearBuffer(); //if (ParseCmd(out cmdInfo, serialParseFunc)) //{ // //OnCmdParsed(cmdInfo); //} } }
/// <summary> /// 解析命令 /// </summary> /// <returns>是否解析出一条正确命令</returns> static Boolean ParseCmd(SerialParseFunc serialParseFunc) { Int32 parsedHeaderIndex; Int32 parsingIndex; var parseResult = serialParseFunc(ReadBuffer, out parsedHeaderIndex, out parsingIndex); Boolean result = false; switch (parseResult) { case CmdParseResult.Fail: //清除解析后的数据 if (parsingIndex > 0) { ReadBuffer.RemoveRange(0, parsingIndex); } break; case CmdParseResult.IncompleteCmd: //清除协议头之前的数据,加快解析 if (parsedHeaderIndex > 0) { ReadBuffer.RemoveRange(0, parsedHeaderIndex); } break; case CmdParseResult.Ok: result = true; //清除解析后的数据 if (parsingIndex > 0) { ReadBuffer.RemoveRange(0, parsingIndex); } break; } return(result); }
/// <summary> /// 解析命令 /// </summary> /// <returns>是否解析出一条正确命令</returns> static Boolean ParseCmd(SerialParseFunc serialParseFunc) { Log.Logger.Debug("开始解析"); Int32 parsedHeaderIndex; Int32 parsingIndex; var parseResult = serialParseFunc(ReadBuffer.ToArray(), out parsedHeaderIndex, out parsingIndex); Log.Logger.Debug("parseResult:" + parseResult.ToString() + " parsedHeaderIndex:" + parsedHeaderIndex + " parsingIndex:" + parsingIndex); Boolean result = false; switch (parseResult) { case CmdParseResult.Fail: //清除解析后的数据 if (parsingIndex > 0) { ReadBuffer.RemoveRange(0, parsingIndex); if (ReadBuffer.Count > 0) { for (int i = 0; i < ReadBuffer.Count; i++) { Log.Logger.Debug("解析:" + ReadBuffer[i].ToString()); } } } break; case CmdParseResult.IncompleteCmd: //清除协议头之前的数据,加快解析 if (parsedHeaderIndex > 0) { ReadBuffer.RemoveRange(0, parsedHeaderIndex); if (ReadBuffer.Count > 0) { for (int i = 0; i < ReadBuffer.Count; i++) { Log.Logger.Debug("解析:" + ReadBuffer[i].ToString()); } } } break; case CmdParseResult.Ok: result = true; //清除解析后的数据 if (parsingIndex > 0) { ReadBuffer.RemoveRange(0, parsingIndex); if (ReadBuffer.Count > 0) { for (int i = 0; i < ReadBuffer.Count; i++) { Log.Logger.Debug("解析:" + ReadBuffer[i].ToString()); } } } break; } return(result); }