I have this code, but there is an recursive function and i can't optimize it, that's why i always have StackOverFlow exception. Can you help me to optimize it? I use this void to get all info or to try again if some errors are found.
public void Parse(byte[] data)
{
Socket skt = new Socket(SocketType.Dgram, ProtocolType.Udp);
skt.ReceiveTimeout = 1000;
skt.Connect(Encryptor.GetNextIP(), port);
skt.Send(data);
try
{
//a lot of actions to get the opcode
switch (opCode)
{
case 0x01:
p = new Packet(opCode);
p.WriteArray(Encryptor.ClientData(answer, false));
Regex rgx = new Regex("\"(?<Name>.+?):");
string part = p.ReadAString();
string res;
if (part[part.Length - 1] != '}') part += '}';
if (rgx.Match(part).Groups["Name"].Value == "")
{
p = null;
Parse(data);
break;
}
else
{ res = "ID=" + rgx.Match(part).Groups["Name"].Value; }
ParseInfo(rgx.Match(part).Groups["Name"].Value);
p = null;
Encryptor = null;
break;
default: string ans = Encoding.ASCII.GetString(recv.Take(bytes).ToArray());
if (ans.Contains("EndOfStream") || ans.Contains("Begin"))
{
Failed();
Encryptor = null;
break;
}
else
{
p = null;
Parse(data);
}
break;
}
}
catch
{
skt.Close();
skt.Dispose();
GC.Collect();
Parse(data);
}
}
Thank you in advance.