예제 #1
0
            internal void BasicFunctionParser(Packet packet, int functionPos, bool open)
            {
            var className = GetClassNameByPosition(functionPos);
            if (!string.IsNullOrWhiteSpace(className) &&
                !className.StartsWith("_SafeStr"))
                packet.Classes.Add(className);

            var function = GetNearTopFunctionByPosition(functionPos, _bufferStr);
            if (!string.IsNullOrEmpty(function))
            {
                var nearPacket = new Packet(GetFunctionName(function));
                ParseVoid(nearPacket, function);
                nearPacket.Sort();

                packet.NearTopPacket.Add(nearPacket);
            }
            function = GetNearBottomFunctionByPosition(functionPos, _bufferStr);
            if (!string.IsNullOrEmpty(function))
            {
                var nearPacket = new Packet(GetFunctionName(function));
                ParseVoid(nearPacket, function);
                nearPacket.Sort();

                packet.NearBottomPacket.Add(nearPacket);
            }

            function = GetFunctionByPosition(functionPos);
            ParseVoid(packet, function);

            if (!open) return;

            var inside = RemoveSafeStr(function).Replace(" function ", string.Empty);
            if (!string.IsNullOrWhiteSpace(inside) && !inside.StartsWith("//"))
                packet.Open.Add(inside);
        }
예제 #2
0
            public void DefinePacket(Packet packet, bool isOutGoing)
            {
            //if (packet.DelegateFunction != "_SafeStr_4296")
            //    return;

            if (isOutGoing)
            {
                ParsePreStructure(packet);
                if (!packet.DelegateFunction.StartsWith("_Safe"))
                    return;
            }
            var split1 = GetPositions(packet.DelegateFunction + "):void", _bufferStr);
            var split2 = GetPositions(packet.DelegateFunction + '(', _bufferStr);
            var split3 = GetPositions(packet.DelegateFunction + ';', _bufferStr);

            packet.References = split1.Count + split2.Count + split3.Count - 1;

            foreach (var splitStr in split1)
            {
                var className = GetClassNameByPosition(splitStr);
                if (!string.IsNullOrWhiteSpace(className) &&
                    !className.StartsWith("_SafeStr")) packet.Classes.Add(className);

                var function = GetFunctionByPosition(splitStr);
                ParseVoid(packet, function);
            }

            foreach (var functionPos in split2)
            {
                BasicFunctionParser(packet, functionPos, true);

                packet.FunctionsOrders.Add(string.Join("-",
                    GetFunctionOrderOfClass(functionPos, packet.DelegateFunction)));
            }

            foreach (var splitStr in split3)
            {
                var className = GetClassNameByPosition(splitStr);
                if (!string.IsNullOrWhiteSpace(className) &&
                    !className.StartsWith("_SafeStr")) packet.Classes.Add(className);
            }

            if (isOutGoing)
            {
                List<int> split4 = GetPositions("(k as " + packet.DelegateFunction + ')', _bufferStr);
                List<int> split5 = GetPositions("(event as " + packet.DelegateFunction + ')', _bufferStr);
                List<int> split6 = GetPositions("(k is " + packet.DelegateFunction + ')', _bufferStr);
                List<int> split7 = GetPositions("(event is " + packet.DelegateFunction + ')', _bufferStr);

                packet.References += split4.Count + split5.Count + split6.Count + split7.Count;

                foreach (var functionPos in split4)
                {
                    BasicFunctionParser(packet, functionPos, false);

                    packet.FunctionsOrders.Add(string.Join("-",
                        GetFunctionOrderOfClass(functionPos, "(k as " + packet.DelegateFunction + ')')));
                }

                foreach (var functionPos in split5)
                {
                    BasicFunctionParser(packet, functionPos, false);

                    packet.FunctionsOrders.Add(string.Join("-",
                        GetFunctionOrderOfClass(functionPos, "(event as " + packet.DelegateFunction + ')')));
                }

                foreach (var functionPos in split5)
                {
                    BasicFunctionParser(packet, functionPos, false);

                    packet.FunctionsOrders.Add(string.Join("-",
                        GetFunctionOrderOfClass(functionPos, "(k is " + packet.DelegateFunction + ')')));
                }

                foreach (var functionPos in split6)
                {
                    BasicFunctionParser(packet, functionPos, false);

                    packet.FunctionsOrders.Add(string.Join("-",
                        GetFunctionOrderOfClass(functionPos, "(event is " + packet.DelegateFunction + ')')));
                }
            }

            packet.Sort();

            Console.WriteLine(packet.DelegateFunction + "   " + packet.References + "   " +
                              string.Join(",", packet.Open));
            Console.WriteLine();
            }