private void ProcessData(byte[] Data) { if (Data.Length == 0) { return; } if (Data[0] == 64) { int Pos = 0; while (Pos < Data.Length) { ClientMessage Message = null; try { int MessageLength = Base64Encoding.DecodeInt32(new byte[] { Data[Pos++], Data[Pos++], Data[Pos++] }); uint MessageId = Base64Encoding.DecodeUInt32(new byte[] { Data[Pos++], Data[Pos++] }); byte[] Content = new byte[MessageLength - 2]; for (int i = 0; i < Content.Length; i++) { Content[i] = Data[Pos++]; } Message = new ClientMessage(MessageId, Content); } catch (Exception) { SessionManager.StopSession(mId); // packet formatting exception return; } if (Message != null) { if (Program.DEBUG) { Output.WriteLine("[RCV][" + mId + "]: "+ Message.Id + " " + Message.ToString(), OutputLevel.DebugInformation); } try { DataRouter.HandleData(this, Message); } catch (Exception e) { Output.WriteLine("Critical error in HandleData stack: " + e.Message + "\n\n" + e.StackTrace, OutputLevel.CriticalError); SessionManager.StopSession(mId); return; } } } } else if (Data[0] == 60) { Output.WriteLine("Sent crossdomain policy to client " + mId + ".", OutputLevel.DebugInformation); SendData(CrossdomainPolicy.GetBytes()); SessionManager.StopSession(mId); } else { SessionManager.StopSession(mId); } }