Example #1
0
        /// <summary>
        /// 変換を行います。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        public ConvertResultType Convert(IConvertParameter parameter)
        {
            var cea = new CancelEventArgs();

            cea.Cancel = false;
            Prepare?.Invoke(parameter, cea);
            if (cea.Cancel)
            {
                var r = new ConvertResultType();
                r = ConvertResultType.Cancelled;
                var ccea = new ConvertCompleteEventArgs();
                ccea.Result = ConvertResultType.Cancelled;
                ConvertCompleted?.Invoke(parameter, ccea);
                return(r);
            }

            try
            {
                return(onConvert(parameter));
            }
            catch (Exception e)
            {
                var result = new ConvertCompleteEventArgs();
                result.Result = ConvertResultType.Failed;
                result.Error  = e;
                ConvertCompleted?.Invoke(parameter, result);
                return(result.Result);
            }
        }
Example #2
0
        /// <summary>
        /// 変換の呼び出しを実施する。
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        private ConvertResultType onConvert(IConvertParameter parameter)
        {
            var result = new ConvertCompleteEventArgs();

            // 変換処理
            DoConvert(parameter);

            result.Result = ConvertResultType.Succeed;
            result.Error  = null;
            ConvertCompleted?.Invoke(parameter, result);
            return(result.Result);
        }
Example #3
0
        /// <summary>
        /// 変換を行います。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        /// <returns>ConvertResult のタスク。</returns>
        public async Task <ConvertResultType> ConvertAsync(IConvertParameter parameter)
        {
            var e = new CancelEventArgs();

            e.Cancel = false;
            Prepare?.Invoke(parameter, e);
            if (e.Cancel)
            {
                var r = new ConvertResultType();
                r = ConvertResultType.Cancelled;
                var cea = new ConvertCompleteEventArgs();
                cea.Result = ConvertResultType.Cancelled;
                ConvertCompleted?.Invoke(parameter, cea);
                return(r);
            }

            var result = await onConvertTask(parameter);

            return(result);
        }
Example #4
0
        /// <summary>
        /// 非同期で変換を行うためのタスクメソッド。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        /// <returns>ConvertResult のタスク。</returns>
        private Task <ConvertResultType> onConvertTask(IConvertParameter parameter)
        {
            var task = new Task <ConvertResultType>(() =>
            {
                try
                {
                    return(onConvert(parameter));
                }
                catch (Exception e)
                {
                    var result    = new ConvertCompleteEventArgs();
                    result.Result = ConvertResultType.Failed;
                    result.Error  = e;
                    ConvertCompleted?.Invoke(parameter, result);
                    return(result.Result);
                }
            });

            task.Start();
            return(task);
        }
Example #5
0
        private static void WriteTsrg(Stream mojangMapSource, FileStream outputStream)
        {
            StreamReader txt = new StreamReader(mojangMapSource, Encoding.UTF8);
            StreamWriter buf = new StreamWriter(outputStream);

            bool loop = true;

            while (loop)
            {
                string s = txt.ReadLine();
                if (s is object && s.Length > 0)
                {
                    if (s.StartsWith("#", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    if (s.StartsWith(" ", StringComparison.Ordinal))
                    {                     // This is a field or a method.
                        s = s.Substring(4);
                        string[] parts = s.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        Debug.Assert(parts.Length == 4);

                        if (parts[1].EndsWith(")", StringComparison.Ordinal))
                        {                                                                                         // This is a method.
                            string returnType = parts[0].Contains(":") ? parts[0].Split(":", true)[2] : parts[0]; // Split line numbers.
                            string obfName    = parts[3];
                            // Separate params from name.
                            string methodName = parts[1].Substring(0, parts[1].IndexOf('('));
                            string @params    = parts[1].Substring(parts[1].IndexOf('(') + 1, parts[1].IndexOf(')') - parts[1].IndexOf('(') - 1);

                            returnType = TypeToDescriptor(returnType);

                            @params = string.Join("", @params.Split(",", true).Select(TypeToDescriptor));

                            //if (!methodName.Equals("<init>") && !methodName.Equals("<clinit>"))
                            buf.Write("\t" + obfName + " (" + @params + ")" + returnType + " " + methodName + "\n");
                        }
                        else
                        {                         // This is a field.
                            string fieldName = parts[1];
                            string obfName   = parts[3];

                            buf.Write("\t" + obfName + " " + fieldName + "\n");
                        }
                    }
                    else
                    {                     // Classes have no dependencies.
                        string[] parts = s.Split(" ", true);
                        //Debug.Assert(parts.Length == 3);

                        string className = parts[0].Replace("/", ".");
                        string obfName   = parts[2].Substring(0, parts[2].Length - 1);
                        if (obfName.Contains("."))
                        {
                            obfName = obfName.Replace(".", "/");
                        }
                        buf.Write(obfName + " " + className.Replace('.', '/') + "\n");                        // Write class entry.
                    }
                }
                else
                {
                    loop = false;
                }
            }

            buf.Close();
            txt.Close();
            ///
            ConvertCompleted.Invoke(null, new EventArgs());
        }