private string sendCommand(string command, bool isMultipacketResponse) { RconSrcPacket senPacket = new RconSrcPacket() { Body = command, Id = (int)PacketId.ExecCmd, Type = (int)PacketType.Exec }; List <byte[]> recvData = socket.GetMultiPacketResponse(RconUtil.GetBytes(senPacket)); StringBuilder str = new StringBuilder(); try { for (int i = 0; i < recvData.Count; i++) { //consecutive rcon command replies start with an empty packet if (BitConverter.ToInt32(recvData[i], 4) == (int)PacketId.Empty) { continue; } if (recvData[i].Length - BitConverter.ToInt32(recvData[i], 0) == 4) { str.Append(RconUtil.ProcessPacket(recvData[i]).Body); } else { str.Append(RconUtil.ProcessPacket(recvData[i]).Body + Util.BytesToString(recvData[++i].Take(recvData[i].Length - 2).ToArray())); } } } catch (Exception e) { e.Data.Add("ReceivedData", recvData.SelectMany(x => x).ToArray()); throw; } return(str.ToString()); }
private string sendCommand(string command, bool isMultipacketResponse) { RconSrcPacket senPacket = new RconSrcPacket() { Body = command, Id = (int)PacketId.ExecCmd, Type = (int)PacketType.Exec }; List <byte[]> recvData = socket.GetMultiPacketResponse(RconUtil.GetBytes(senPacket)); StringBuilder str = new StringBuilder(); bool lastPacket = false; bool firstPacket = false; try { for (int i = 0; i < recvData.Count; i++) { if (BitConverter.ToInt32(recvData[i], 4) == (int)PacketId.Empty) { continue; } if (recvData[i].Length - BitConverter.ToInt32(recvData[i], 0) == 4) { str.Append(RconUtil.ProcessPacket(recvData[i]).Body); } else { lastPacket = (i == recvData.Count - 1); firstPacket = i == 0; str.Append(RconUtil.ProcessPacket(recvData[i], firstPacket, lastPacket).Body); } } } catch (Exception e) { e.Data.Add("ReceivedData", recvData.SelectMany(x => x).ToArray()); throw; } return(str.ToString()); }