inforesponse and statusresponse now work properly.
This commit is contained in:
parent
970d7f71c5
commit
07e335b780
1 changed files with 86 additions and 11 deletions
|
|
@ -90,6 +90,7 @@ namespace TShockAPI
|
||||||
Log.Error(e.ToString());
|
Log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string SendPacket(byte[] bytes, string hostname, int port)
|
private static string SendPacket(byte[] bytes, string hostname, int port)
|
||||||
|
|
@ -123,14 +124,13 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(Password))
|
if (!string.IsNullOrEmpty(Password))
|
||||||
{
|
{
|
||||||
var args = packetstring.Split(' ');
|
var args = ParseParameters(packetstring);
|
||||||
if (args.Length >= 3)
|
if (args.Count >= 3)
|
||||||
{
|
{
|
||||||
if (args[1] == Password)
|
if (args[1] == Password)
|
||||||
{
|
{
|
||||||
string command = "";
|
args[1] = "";
|
||||||
for (int i = 2; i < args.Length; i++)
|
string command = string.Join(" ", args.ToArray());
|
||||||
command += args[i] + " ";
|
|
||||||
command = command.TrimEnd(' ').TrimEnd('\0');
|
command = command.TrimEnd(' ').TrimEnd('\0');
|
||||||
Response = "";
|
Response = "";
|
||||||
response = ExecuteCommand(command);
|
response = ExecuteCommand(command);
|
||||||
|
|
@ -187,9 +187,7 @@ namespace TShockAPI
|
||||||
foreach (TSPlayer player in TShock.Players)
|
foreach (TSPlayer player in TShock.Players)
|
||||||
{
|
{
|
||||||
if (player != null && player.Active)
|
if (player != null && player.Active)
|
||||||
{
|
|
||||||
statusstring += (string.Format("0 0 {0}\n", player.Name));
|
statusstring += (string.Format("0 0 {0}\n", player.Name));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
response += statusstring;
|
response += statusstring;
|
||||||
print = false;
|
print = false;
|
||||||
|
|
@ -275,10 +273,10 @@ namespace TShockAPI
|
||||||
writer.Write(Encoding.UTF8.GetBytes(string.Format("print\n{0}", response)));
|
writer.Write(Encoding.UTF8.GetBytes(string.Format("print\n{0}", response)));
|
||||||
else
|
else
|
||||||
writer.Write(Encoding.UTF8.GetBytes(response));
|
writer.Write(Encoding.UTF8.GetBytes(response));
|
||||||
var packet = Encoding.UTF8.GetBytes(
|
var trimmedpacket = new byte[(int)stream.Length];
|
||||||
(Encoding.UTF8.GetString(stream.GetBuffer())
|
var packet = stream.GetBuffer();
|
||||||
.Substring(0, (int)stream.Length)));
|
Array.Copy(packet, trimmedpacket, (int)stream.Length);
|
||||||
return packet;
|
return trimmedpacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] PadPacket(byte[] packet)
|
private static byte[] PadPacket(byte[] packet)
|
||||||
|
|
@ -296,5 +294,82 @@ namespace TShockAPI
|
||||||
returnpacket = packet;
|
returnpacket = packet;
|
||||||
return returnpacket;
|
return returnpacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region ParseParams
|
||||||
|
private static List<String> ParseParameters(string str)
|
||||||
|
{
|
||||||
|
var ret = new List<string>();
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
bool instr = false;
|
||||||
|
for (int i = 0; i < str.Length; i++)
|
||||||
|
{
|
||||||
|
char c = str[i];
|
||||||
|
|
||||||
|
if (instr)
|
||||||
|
{
|
||||||
|
if (c == '\\')
|
||||||
|
{
|
||||||
|
if (i + 1 >= str.Length)
|
||||||
|
break;
|
||||||
|
c = GetEscape(str[++i]);
|
||||||
|
}
|
||||||
|
else if (c == '"')
|
||||||
|
{
|
||||||
|
ret.Add(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
instr = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sb.Append(c);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (IsWhiteSpace(c))
|
||||||
|
{
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
ret.Add(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (c == '"')
|
||||||
|
{
|
||||||
|
if (sb.Length > 0)
|
||||||
|
{
|
||||||
|
ret.Add(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
instr = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.Append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sb.Length > 0)
|
||||||
|
ret.Add(sb.ToString());
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
private static char GetEscape(char c)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\\':
|
||||||
|
return '\\';
|
||||||
|
case '"':
|
||||||
|
return '"';
|
||||||
|
case 't':
|
||||||
|
return '\t';
|
||||||
|
default:
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static bool IsWhiteSpace(char c)
|
||||||
|
{
|
||||||
|
return c == ' ' || c == '\t' || c == '\n';
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue