예제 #1
0
        protected override void WriteProxy(IndentedTextWriter writer)
        {
            if (writer == null)
                throw new ArgumentNullException("writer");

            writer.WriteLine("// This JavaScript was automatically generated by");
            writer.Write("// ");
            writer.WriteLine(GetType().AssemblyQualifiedName);
            writer.Write("// on ");
            DateTime now = DateTime.Now;
            TimeZone timeZone = TimeZone.CurrentTimeZone;
            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());
            writer.Write(" (");
            writer.Write(timeZone.IsDaylightSavingTime(now) ? 
                timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");
            writer.WriteLine();

            string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim();

            Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path));
            
            if (version.Equals("2"))
                Version2(Service.GetClass(), url, writer);
            else
                Version1(Service.GetClass(), url, writer);
        }
        private void WriteClass(IndentedTextWriter writer, ServiceClass serviceClass)
        {
            writer.Write("class ");
            writer.Write(serviceClass.Name);
            writer.WriteLine(":");
            writer.Indent++;

            writer.Write(_docQuotes);
            writer.Indent--;

            if (serviceClass.Description.Length > 0)
            {
                writer.WriteLine(serviceClass.Description);
                writer.WriteLine();
            }

            writer.WriteLine("This Python class was automatically generated by");
            writer.WriteLine(GetType().AssemblyQualifiedName);

            DateTime now = DateTime.Now;
            writer.Write("on ");
            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());

            writer.Write(" (");
            TimeZone timeZone = TimeZone.CurrentTimeZone;
            writer.Write(timeZone.IsDaylightSavingTime(now) ?
                         timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");

            writer.WriteLine(_docQuotes);
            writer.Indent++;

            Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path));
            writer.WriteLine(@"def __init__(self, url = '" + url + @"'):
            self.url = url
            self.__id = 0");

            writer.WriteLine();
        }
        protected override void ProcessRequest()
        {
            if (!Modified())
            {
                Response.StatusCode = 304;
                return;
            }

            if (HasLastModifiedTime)
            {
                Response.Cache.SetCacheability(HttpCacheability.Public);

                //
                // Unfortunately, HttpCachePolicy.SetLastModified fails
                // if the last modified time passed has a precision higher
                // than second so we need to crop anything less than a 
                // second before setting it.
                //

                long lastModifiedTicks = LastModifiedTime.Ticks;
                Response.Cache.SetLastModified(new DateTime(lastModifiedTicks - (lastModifiedTicks % TimeSpan.TicksPerSecond)));
            }

            IRpcServiceDescriptor service = TargetService.GetDescriptor();

            Response.ContentType = "text/javascript";
            Response.AppendHeader("Content-Disposition", 
                "attachment; filename=" + service.Name + "Proxy.js");

            IndentedTextWriter writer = new IndentedTextWriter(Response.Output);

            writer.WriteLine("// This JavaScript was automatically generated by");
            writer.Write("// ");
            writer.WriteLine(GetType().AssemblyQualifiedName);
            writer.Write("// on ");
            DateTime now = DateTime.Now;
            TimeZone timeZone = TimeZone.CurrentTimeZone;
            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());
            writer.Write(" (");
            writer.Write(timeZone.IsDaylightSavingTime(now) ? 
                timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");
            writer.WriteLine();

            string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim();

            if (version.Equals("2"))
                Version2(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer);
            else
                Version1(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer);
        }
        protected override void ProcessRequest()
        {
            if (!Modified())
            {
                Response.StatusCode = 304;
                return;
            }

            if (HasLastModifiedTime)
            {
                Response.Cache.SetCacheability(HttpCacheability.Public);
                Response.Cache.SetLastModified(LastModifiedTime);
            }

            JsonRpcServiceClass service = Service.GetClass();

            Response.ContentType = "text/javascript";
            Response.AppendHeader("Content-Disposition", 
                "attachment; filename=" + service.Name + "Proxy.js");

            IndentedTextWriter writer = new IndentedTextWriter(Response.Output);

            writer.WriteLine("// This JavaScript was automatically generated by");
            writer.Write("// ");
            writer.WriteLine(GetType().AssemblyQualifiedName);
            writer.Write("// on ");
            DateTime now = DateTime.Now;
            TimeZone timeZone = TimeZone.CurrentTimeZone;
            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());
            writer.Write(" (");
            writer.Write(timeZone.IsDaylightSavingTime(now) ? 
                timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");
            writer.WriteLine();

            string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim();

            if (version.Equals("2"))
                Version2(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer);
            else
                Version1(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer);
        }
        private void WriteMethod(IndentedTextWriter writer, Method method)
        {
            string clientMethodName = method.Name.Replace(".", "_");

            writer.Write("def ");
            writer.Write(clientMethodName);
            writer.Write("(self");

            Parameter[] parameters = method.GetParameters();

            foreach (Parameter parameter in parameters)
            {
                writer.Write(", ");
                writer.Write(parameter.Name);
            }

            writer.WriteLine("):");
            writer.Indent++;

            if (method.Description.Length > 0)
            {
                // TODO: What to do if /* and */ appear in the summary?

                writer.Write(_docQuotes);
                writer.WriteLine(method.Description);
                writer.WriteLine(_docQuotes);
            }

            writer.Write("return self.__call('");
            writer.Write(method.Name);
            writer.Write("', (");

            foreach (Parameter parameter in parameters)
            {
                writer.Write(parameter.Name);
                writer.Write(", ");
            }

            writer.WriteLine("))");
            writer.Indent--;
            writer.WriteLine();
        }
예제 #6
0
        /// <summary>
        /// Outputs the C++ code for the given node to the <see cref="TextWriter"/> instance.
        /// </summary>
        /// <param name="writer">The writer to output to.</param>
        /// <param name="node">The node to output.</param>
        /// <param name="logger">The logger.</param>
        private void WriteNode(IndentedTextWriter writer, BaseNode node, ILogger logger)
        {
            Contract.Requires(writer != null);
            Contract.Requires(node != null);

            var custom = GetCustomCodeGeneratorForNode(node);

            if (custom != null)
            {
                if (custom.WriteNode(writer, node, WriteNode, logger))
                {
                    return;
                }
            }

            node = TransformNode(node);

            var simpleType = GetTypeDefinition(node, logger);

            if (simpleType != null)
            {
                //$"{type} {node.Name}; //0x{node.Offset.ToInt32():X04} {node.Comment}".Trim();
                writer.Write(simpleType);
                writer.Write(" ");
                writer.Write(node.Name);
                writer.Write("; //0x");
                writer.Write($"{node.Offset:X04}");
                if (!string.IsNullOrEmpty(node.Comment))
                {
                    writer.Write(" ");
                    writer.Write(node.Comment);
                }
                writer.WriteLine();
            }
            else if (node is BaseWrapperNode)
            {
                writer.Write(ResolveWrappedType(node, false, logger));
                writer.Write("; //0x");
                writer.Write($"{node.Offset:X04}");
                if (!string.IsNullOrEmpty(node.Comment))
                {
                    writer.Write(" ");
                    writer.Write(node.Comment);
                }
                writer.WriteLine();
            }
            else if (node is UnionNode unionNode)
            {
                writer.Write("union //0x");
                writer.Write($"{node.Offset:X04}");
                if (!string.IsNullOrEmpty(node.Comment))
                {
                    writer.Write(" ");
                    writer.Write(node.Comment);
                }
                writer.WriteLine();
                writer.WriteLine("{");
                writer.Indent++;

                WriteNodes(writer, unionNode.Nodes, logger);

                writer.Indent--;
                writer.WriteLine("};");
            }
            else
            {
                logger.Log(LogLevel.Error, $"Skipping node with unhandled type: {node.GetType()}");
            }
        }
예제 #7
0
 internal override void ToFlashAsm(IndentedTextWriter w)
 {
     w.Write(FloatValue);
 }
예제 #8
0
 protected void Write(char value)
 {
     _Writer.Write(value);
 }
예제 #9
0
        /// <summary>
        /// The decompiler generates a literal (expression) on an expression.
        /// </summary>
        /// <param name="output">The output.</param>
        /// <param name="expression">The expression.</param>
        /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param>
        /// <returns>Returns true if code was generated.</returns>
        private bool GenerateExpression(IndentedTextWriter output, ScriptExpression expression, bool newLine)
        {
            ScriptValueType type       = _opcodes.GetTypeInfo(expression.ReturnType);
            ScriptValueType actualType = type;

            // Check if a typecast is occurring
            if (expression.Opcode != 0xFFFF)
            {
                actualType = _opcodes.GetTypeInfo(expression.Opcode);

                // Simply write the string for quoted expressions.
                if (actualType.Quoted)
                {
                    // Don't quote the keyword none.
                    if (expression.Value.IsNull || expression.StringValue == "none")
                    {
                        output.Write("none");
                    }
                    else
                    {
                        output.Write("\"{0}\"", ScriptStringHelpers.Escape(expression.StringValue));
                    }
                    return(false);
                }
            }

            uint value = GetValue(expression, actualType);

            byte[] val = BitConverter.GetBytes(value);
            string text;


            switch (actualType.Name)
            {
            case "void":
                text = "";
                break;

            case "ai_command_script":
            case "script":
                short index = BitConverter.ToInt16(val, 0);
                text = _scripts.Scripts[index].Name;
                break;

            case "boolean":
                text = BitConverter.ToBoolean(val, 0) ? "true" : "false";
                break;

            case "short":
                text = BitConverter.ToInt16(val, 0).ToString();
                break;

            case "long":
                // Signed integer
                int signed = (int)value;
                text = signed.ToString();
                break;

            case "real":
                float fl = BitConverter.ToSingle(val, 0);
                text = fl.ToString("0.0#######", CultureInfo.InvariantCulture);
                break;

            case "ai_line":
                text = expression.StringValue == "" ? "\"\"" : expression.StringValue;
                break;

            case "unit_seat_mapping":
                text = expression.Value.IsNull ? "none" : expression.StringValue;
                break;

            default:
                if (expression.Value.IsNull)
                {
                    text = "none";
                }
                else if (actualType.IsEnum)
                {
                    string enumValue = actualType.GetEnumValue(value);
                    if (enumValue != null)
                    {
                        text = enumValue;
                    }
                    else
                    {
                        throw new NotImplementedException("Unknown Enum Value.");
                    }
                }
                else
                {
                    //throw new NotImplementedException($"Unhandled Return Type: \"{actualType.Name}\".");
                    text = expression.StringValue;
                }

                break;
            }

            output.Write(text);
            HandleNewLine(output, newLine);
            return(false);
        }
예제 #10
0
        /// <summary>
        /// The decompiler follows a branch based on a datum index and generates code. Also handles most of the text formatting.
        /// </summary>
        /// <param name="output">The output.</param>
        /// <param name="root">The datumn index to follow.</param>
        /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param>
        /// <param name="type">The type of the branch.</param>
        private void FollowRootIndex(IndentedTextWriter output, DatumIndex root, bool newLine, BranchType type)
        {
            ScriptExpression exp = _scripts.Expressions.FindExpression(root);
            int index            = 0;

            // iterate through the branch.
            while (exp != null)
            {
                int  startIndent          = output.Indent;
                bool endOfExpression      = exp.NextExpression is null;
                bool endOfInlineMultiline = false;

                // Remove the last expression in cond calls, which were added by the compiler.
                if (type == BranchType.Cond && endOfExpression && exp.Type == ScriptExpressionType.Expression && exp.LineNumber == 0)
                {
                    return;
                }
                // if: indent the condition if it is a multiline expression.
                else if (type == BranchType.If && index == 1 && IsMultilineExpression(exp))
                {
                    output.WriteLine();
                    output.Indent++;
                }
                // if: indent after the condition.
                else if (type == BranchType.If && index == 2)
                {
                    output.WriteLine();
                    output.Indent++;
                }
                // begin, and, or (multiline): indent after the function name.
                else if (type == BranchType.Multiline && index == 1)
                {
                    output.WriteLine();
                    output.Indent++;
                }
                // cond: indent after the condition.
                else if (type == BranchType.Cond && index == 2)
                {
                    output.WriteLine();
                    output.Indent++;
                }
                // make begin, or and if calls always start on a new line.
                else if (type == BranchType.Call && IsMultilineExpression(exp))
                {
                    output.WriteLine();
                    output.Indent++;
                    endOfInlineMultiline = true;
                }

                // write code.
                HandleExpression(output, exp, newLine);

                // insert space between the parameters of calls and script references.
                if ((type == BranchType.Call || type == BranchType.If) && !endOfExpression && !newLine)
                {
                    output.Write(" ");
                }

                // handle the line break after inline multiline expressions and reset the indent.
                if (endOfInlineMultiline && !endOfExpression)
                {
                    output.WriteLine();
                    output.Indent = startIndent;
                }
                // handle the line break after if statements which end on a multiline expression.
                else if (type == BranchType.If && IsMultilineExpression(exp) && endOfExpression)
                {
                    output.WriteLine();
                }
                // If a regular call ends on a multiline call, insert a line break and reset the indent. Mostly applies to sleep_until in combination with or.
                else if (type == BranchType.Call && IsMultilineExpression(exp) && endOfExpression)
                {
                    output.WriteLine();
                    output.Indent = startIndent;
                }


                index++;
                exp = exp.NextExpression;
            }
        }
예제 #11
0
 public void Append(string text)
 {
     writer.Write(text);
 }
예제 #12
0
 public SourceBuilder Write(string?value = null)
 {
     _indentedWriter.Write(value);
     return(this);
 }
예제 #13
0
 public void Dump(IndentedTextWriter w)
 {
     w.Write("DefineFont: ");
     w.WriteLine();
 }
        public void WriteProxy(ServiceClass service, IndentedTextWriter writer, HttpRequest request)
        {
            ValidationUtils.ArgumentNotNull(writer, "writer");

            writer.WriteLine("// This JavaScript was automatically generated by");
            writer.Write("// ");
            writer.WriteLine(GetType().AssemblyQualifiedName);
            writer.Write("// on ");
            DateTime now      = DateTime.Now;
            TimeZone timeZone = TimeZone.CurrentTimeZone;

            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());
            writer.Write(" (");
            writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");
            writer.WriteLine();

            Uri url = request.Url;

            Debug.Assert(service != null);
            Debug.Assert(url != null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);

            writer.WriteLine("// Default Proxy");
            writer.WriteLine();

            writer.Write("function ");
            writer.Write(service.Name);
            writer.WriteLine("(url)");
            writer.WriteLine("{");
            writer.Indent++;

            ICollection methods = service.GetMethods();

            string[] methodNames = new string[methods.Count];

            int i = 0;

            foreach (Method method in methods)
            {
                methodNames[i++] = method.Name;

                writer.Write("this[\"");
                writer.Write(method.Name);
                writer.Write("\"] = function(");

                Parameter[] parameters = method.GetParameters();

                foreach (Parameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback)");
                writer.WriteLine("{");
                writer.Indent++;

                writer.Write("return call(\"");
                writer.Write(method.Name);
                writer.Write("\", [");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                    {
                        writer.Write(',');
                    }
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback);");

                writer.Indent--;
                writer.WriteLine("}");
                writer.WriteLine();
            }

            writer.Write("var url = typeof(url) === 'string' ? url : '");
            writer.Write(url);
            writer.WriteLine("';");
            writer.WriteLine(@"var self = this;
    var nextId = 0;
    var credentials;

    this['setCredentials'] = function(userid, password)
    {
        this.credentials = Base64.encode(userid + ':' + password);
    }

    this['clearCredentials'] = function()
    {
        var request = { id : nextId++, method : 'clearCredentials', params : [] };
        this.credentials = null;
        callSync('clearCredentials', request);
    }

    function call(method, params, callback)
    {
        var request = { id : nextId++, method : method, params : params, credentials:self.credentials };
        return callback == null ? 
            callSync(method, request) : callAsync(method, request, callback);
    }

    function callSync(method, request)
    {
        var http = newHTTP();
        http.open('POST', url, false, self.httpUserName, self.httpPassword);
        setupHeaders(http, method);
        http.send(JSON.stringify(request));
        if (http.status != 200)
            throw { message : http.status + ' ' + http.statusText, toString : function() { return message; } };
        var response = JSON.parse(http.responseText);
        if (response.error != null) throw response.error;
        return response.result;
    }

    function callAsync(method, request, callback)
    {
        var http = newHTTP();
        http.open('POST', url, true, self.httpUserName, self.httpPassword);
        setupHeaders(http, method);
        http.onreadystatechange = function() { http_onreadystatechange(http, callback); }
        http.send(JSON.stringify(request));
        return request.id;
    }

    function setupHeaders(http, method)
    {
        http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8');
        http.setRequestHeader('X-JSON-RPC', method);
    }

    function http_onreadystatechange(sender, callback)
    {
        if (sender.readyState == /* complete */ 4)
        {
            var response = sender.status == 200 ? 
                JSON.parse(sender.responseText) : {};
            
            response.xmlHTTP = sender;
                
            callback(response);
        }
    }

    function newHTTP()
    {
        if (typeof(window) != 'undefined' && window.XMLHttpRequest)
            return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */
        else
            return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */
    }");

            writer.Indent--;
            writer.WriteLine("}");

            writer.WriteLine();
            writer.Write(service.Name);
            writer.Write(".rpcMethods = ");
            //JsonTextWriter jsonWriter = new JsonTextWriter(writer);
            //jsonWriter.WriteStringArray(methodNames);
            JsonWriter jsonWriter = new JsonWriter(writer);

            jsonWriter.WriteStringArray(methodNames);
            writer.WriteLine(";");
        }
예제 #15
0
        private void ShowComponents(IndentedTextWriter writer)
        {
            Type   typeSig;
            Type   typeRes;
            string kind;

            if (_kind == null)
            {
                // Show commands.
                typeSig = typeof(SignatureCommand);
                typeRes = typeof(ICommand);
                kind    = "Command";
                writer.WriteLine("Available commands:");
            }
            else
            {
                kind = _kind.ToLowerInvariant();
                var sigs = _env.ComponentCatalog.GetAllSignatureTypes();
                typeSig = sigs.FirstOrDefault(t => ComponentCatalog.SignatureToString(t).ToLowerInvariant() == kind);
                if (typeSig == null)
                {
                    typeSig = sigs.FirstOrDefault(t => ComponentCatalog.SignatureToString(t).StartsWithInvariantCultureIgnoreCase(kind));
                    if (typeSig == null)
                    {
                        writer.WriteLine("Couldn't find kind '{0}'", kind);
                        ListKinds(writer);
                        return;
                    }
                }
                typeRes = typeof(object);
                writer.WriteLine("Available components for kind '{0}':", ComponentCatalog.SignatureToString(typeSig));
            }

            var infos = _env.ComponentCatalog.GetAllDerivedClasses(typeRes, typeSig)
                        .Where(x => !x.IsHidden)
                        .OrderBy(x => x.LoadNames[0].ToLowerInvariant());

            using (writer.Nest())
            {
                var components = new List <Component>();
                foreach (var info in infos)
                {
                    _env.Assert(info.LoadNames.Count > 0);

                    writer.Write("{0}", info.LoadNames[0]);
                    if (!string.IsNullOrWhiteSpace(info.UserName))
                    {
                        writer.Write(": {0}", info.UserName);
                    }
                    writer.WriteLine();

                    using (writer.Nest())
                        ShowAliases(writer, info.LoadNames);
                    components.Add(new Component(kind, info, info.CreateArguments()));
                }

                if (components.Count > 0)
                {
                    Serialize(components);
                }
            }
        }
예제 #16
0
 public override void ToString(IndentedTextWriter writer)
 {
     writer.Write("fn {0}", Function);
 }
예제 #17
0
 public override void ToString(IndentedTextWriter writer)
 {
     writer.Write("extern {0}", External);
 }
        protected override void WriteProxy(IndentedTextWriter writer)
        {
            if (writer == null)
                throw new ArgumentNullException("writer");

            writer.WriteLine("# This PowerShell script was automatically generated by");
            writer.Write("# ");
            writer.WriteLine(GetType().AssemblyQualifiedName);
            writer.Write("# on ");
            DateTime now = DateTime.Now;
            TimeZone timeZone = TimeZone.CurrentTimeZone;
            writer.Write(now.ToLongDateString());
            writer.Write(" at ");
            writer.Write(now.ToLongTimeString());
            writer.Write(" (");
            writer.Write(timeZone.IsDaylightSavingTime(now) ? 
                timeZone.DaylightName : timeZone.StandardName);
            writer.WriteLine(")");
            writer.WriteLine();

            Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path));
            ServiceClass service = Service.GetClass();

            writer.Write("function ");
            writer.Write(service.Name);
            writer.WriteLine(" {");
            writer.Indent++;
            writer.Write("param($url = '");
            writer.Write(url.ToString());
            writer.WriteLine("')");
            writer.WriteLine();
            writer.WriteLine("$self = New-Object PSObject");
            writer.WriteLine("$self | Add-Member NoteProperty url $url");
            writer.WriteLine("$self | Add-Member NoteProperty id 0");
            writer.WriteLine();
    
            Method[] methods = service.GetMethods();
            string[] methodNames = new string[methods.Length];
    
            for (int i = 0; i < methods.Length; i++)
            {
                Method method = methods[i];
                methodNames[i] = method.Name;

                if (method.Description.Length > 0)
                {
                    writer.Write("# ");
                    writer.WriteLine(Regex.Replace(method.Description, "(\r\n)|\r|\n", "$0 #", RegexOptions.None));
                    writer.WriteLine();
                }

                writer.Write("$self | Add-Member ScriptMethod ");
                writer.Write(method.Name.Replace(".", "_"));
                writer.WriteLine(" {");
                writer.Indent++;
                writer.Write("$this.jayrock_rpc('");
                writer.Write(method.Name);
                writer.Write("', @{");

                Parameter[] parameters = method.GetParameters();
                
                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(';');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                    writer.Write(" = $args[");
                    writer.Write(parameter.Position.ToString(CultureInfo.InvariantCulture));
                    writer.Write(']');
                }

                writer.WriteLine(" })");
                writer.Indent--;
                writer.WriteLine("}");
                writer.WriteLine();
            }
    
            writer.WriteLine();
            writer.WriteLine(@"$self | Add-Member ScriptMethod jayrock_rpc {
        $this.id++
        $req = [Jayrock.Json.Conversion.JsonConvert]::ExportToString(@{ 
            'id' = $this.id; 'method' = $args[0]; 'params' = $args[1]})
        $form = New-Object Collections.Specialized.NameValueCollection
        $form.Add('JSON-RPC', $req)
        $wc = New-Object Net.WebClient
        $bytes = $wc.UploadValues($this.url, $form)
        if ($bytes) {
            # TODO: Get the encoding from the charset in the Content-Type response header
            $rsp = [Jayrock.Json.Conversion.JsonConvert]::Import([Text.Encoding]::UTF8.GetString($bytes))
            if ($rsp.error) {
                throw $rsp.error.message
            }
            else {
                $rsp.result
            }
        }
    }

    $self");
    
            writer.Indent--;
            writer.WriteLine("}");
        }
예제 #19
0
 internal override void ToFlashAsm(IndentedTextWriter w)
 {
     w.Write("UNDEF");
 }
예제 #20
0
        public bool Export(Project _project, SpriteExporter _spriteExporter, SpriteImage _mainMenuBGImage)
        {
            bool success = false;

            try {
                if (!Directory.Exists(m_exportPath))
                {
                    Directory.CreateDirectory(m_exportPath);
                }
                //Text Files


                //Gib den SpriteImages einen unique Key und füge diesen Key beim Export für jede Benutzung einem Dictionary zu
                //Wenn Das Sprite scho einmal benutzt wurde, wird es trotzdem nurt einmal vermerkt.

                //ImageImports
                using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "ImageImports.txt"), false)) {
                    for (int i = 0; i < _spriteExporter.SpriteCount; ++i)
                    {
                        writer.WriteLine(Path.GetFileName(_spriteExporter.SpritesArray[i].Image));
                    }
                    writer.Close();
                }

                //(Button)Sprite Imports
                using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "SpriteImports.txt"), false)) {
                    for (int i = 0; i < _spriteExporter.ButtonSpriteCount; ++i)
                    {
                        writer.WriteLine(Path.GetFileName(_spriteExporter.ButtonSpritesArray[i].Image));
                    }
                    writer.Close();
                }

                //Storyboard
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "Storyboard.txt"), false))) {
                    m_textBuilder.ExportStory(writer, _project, _spriteExporter);
                    writer.Close();
                }

                //Options Datei
                using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "options.txt"), false)) {
                    SettingsViewModel    svm  = _project.ProjectSettingsViewModel;
                    FontManagerViewModel fmvm = _project.FontManagerViewModel;
                    writer.WriteLine($"WindowWidth: {svm.WindowWidth};");
                    writer.WriteLine($"WindowHeight: {svm.WindowHeight};");
                    writer.WriteLine($"TextBoxRed: {svm.TextBoxRed};");
                    writer.WriteLine($"TextBoxGreen: {svm.TextBoxGreen};");
                    writer.WriteLine($"TextBoxBlue: {svm.TextBoxBlue};");
                    writer.WriteLine($"TextBoxAlpha: {svm.TextBoxAlpha};");
                    writer.WriteLine($"Font: {fmvm.CurrentUsedFont.Font.Source}.ttf;");
                    writer.Write($"FontSize: {fmvm.FontSize};");                     //Last entry has to not contain new Line or Game loading will fail
                    writer.Close();
                }

                //Menu Files
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "MainMenu.txt"), false))) {
                    m_textBuilder.ExportMainMenu(writer, _mainMenuBGImage, _spriteExporter);
                    writer.Close();
                }

                //SaveMenu
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "SaveMenu.txt"), false))) {
                    var    base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIlNhdmUgTWVudSI7CgoJQkdJbmRleDogMgoKCUl0ZW1zIHsKCQlCdXR0b24gewoJCQlUZXh0OiAiR28gQmFjayI7CgkJCUJ1dHRvbjogNjAwLCA1MDAsIDEwMCwgMjAwLCAwOwoJCQlUeXBlOiAxMTsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDc7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiA1MCwgMjMwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiA3OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogNTAsIDI5MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogNzsKCQl9CgoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDE3MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogNzsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDIwMCwgMjMwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiA3OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogMjAwLCAyOTAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDc7CgkJfQoJfQp9");
                    string exportString       = Encoding.UTF8.GetString(base64EncodedBytes);
                    writer.Write(exportString);
                    writer.Close();
                }
                //LoadMenu
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "LoadMenu.txt"), false))) {
                    var    base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIkxvYWQgTWVudSI7CgoJQkdJbmRleDogMgoKCUl0ZW1zIHsKCQlCdXR0b24gewoJCQlUZXh0OiAiR28gQmFjayI7CgkJCUJ1dHRvbjogNjAwLCA1MDAsIDEwMCwgMjAwLCAwOwoJCQlUeXBlOiAxMTsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDEyOwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogNTAsIDIzMCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiA1MCwgMjkwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiAxMjsKCQl9CgoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDE3MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDIzMCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDI5MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJfQp9");
                    string exportString       = Encoding.UTF8.GetString(base64EncodedBytes);
                    writer.Write(exportString);
                    writer.Close();
                }
                //PauseMenu
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "PauseMenu.txt"), false))) {
                    var    base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIlBhdXNlIE1lbnUiOwoKCUJHSW5kZXg6IDIKCglJdGVtcyB7CgkJQnV0dG9uIHsKCQkJVGV4dDogIkJhY2sgdG8gR2FtZSI7CgkJCUJ1dHRvbjogNTAsIDUwLCAxMDAsIDIwMCwgMDsKCQkJVHlwZTogMTA7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJTYXZlIjsKCQkJQnV0dG9uOiA1MCwgMTEwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiAxNDsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIkxvYWQiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDE1OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiQmFjayB0byBNYWluIE1lbnUiOwoJCQlCdXR0b246IDUwLCAyMzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDEzOwoJCX0KCX0KfQ==");
                    string exportString       = Encoding.UTF8.GetString(base64EncodedBytes);
                    writer.Write(exportString);
                    writer.Close();
                }
                //Variables
                using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "Variables.txt"), false))) {
                    m_textBuilder.ExportVariables(writer, _project.VariableManagerViewModel);
                    writer.Close();
                }

                //Copy Files
                string filename;
                string destFile;
                //Image Files
                for (int i = 0; i < _spriteExporter.SpriteCount; ++i)
                {
                    filename = Path.GetFileName(_spriteExporter.SpritesArray[i].Image);
                    destFile = Path.Combine(m_exportPath, filename);
                    File.Copy(_spriteExporter.SpritesArray[i].Image, destFile, true);
                }
                //Button Image Files
                for (int i = 0; i < _spriteExporter.ButtonSpriteCount; ++i)
                {
                    filename = Path.GetFileName(_spriteExporter.ButtonSpritesArray[i].Image);
                    destFile = Path.Combine(m_exportPath, filename);
                    File.Copy(_spriteExporter.ButtonSpritesArray[i].Image, destFile, true);
                }
                //TTF Font Files
                string path = _project.FontManagerViewModel.CurrentUsedFont.Font.BaseUri.OriginalString;
                filename = _project.FontManagerViewModel.CurrentUsedFont.Font.Source;
                destFile = Path.Combine(m_exportPath, filename + ".ttf");
                File.Copy(path, destFile, true);

                //bin Files
                path = Directory.GetCurrentDirectory() + @"\bin";
                DirectoryCopy(path, m_exportPath, false);

                return(success = true);
            } catch (Exception ex) {
                MessageBox.Show("Export failed! " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(success);
            }
        }
예제 #21
0
        /// <summary>
        /// Writes scripts to the output.
        /// </summary>
        /// <param name="output">The outout.</param>
        /// <param name="showInfo">If set to true, writes additional information to the decompiled text.</param>
        /// <returns>Returns true if scripts were written to the output.</returns>
        private bool WriteScripts(IndentedTextWriter output, bool showInfo)
        {
            // return if the map doesn't contain scripts.
            if (_scripts.Scripts is null || _scripts.Scripts.Count == 0)
            {
                return(false);
            }
            WriteComment(output, "SCRIPTS");
            output.WriteLine();

            for (int i = 0; i < _scripts.Scripts.Count; i++)
            {
                Script scr = _scripts.Scripts[i];

                // Filter out branch scripts which were generated by the compiler.
                var split = scr.Name.Split(new string[] { "_to_" }, StringSplitOptions.RemoveEmptyEntries);
                if (split.Length == 2)
                {
                    if (_scripts.Scripts.Exists(s => s.Name == split[0]) && _scripts.Scripts.Exists(s => s.Name == split[split.Length - 1]))
                    {
                        continue;
                    }
                }
                else if (split.Length == 3)
                {
                    string firstTwo = string.Join("_to_", split, 0, 2);
                    string lastTwo  = string.Join("_to_", split, 1, 2);
                    if ((_scripts.Scripts.Exists(s => s.Name == firstTwo) && _scripts.Scripts.Exists(s => s.Name == split[2])) ||
                        (_scripts.Scripts.Exists(s => s.Name == lastTwo) && _scripts.Scripts.Exists(s => s.Name == split[0])))
                    {
                        continue;
                    }
                }
                else if (split.Length == 4)
                {
                    string firstHalf  = string.Join("_to_", split, 0, 2);
                    string secondHalf = string.Join("_to_", split, 2, 2);
                    if (_scripts.Scripts.Exists(s => s.Name == firstHalf) && _scripts.Scripts.Exists(s => s.Name == secondHalf))
                    {
                        continue;
                    }
                }

                // Write additional information.
                if (showInfo)
                {
                    WriteComment(output, $"Index: {i}, Expression Index: {scr.RootExpressionIndex.Index.ToString()}");
                }

                // Write script declaration.
                output.Write("(script {0} {1} {2}", _opcodes.GetScriptTypeName((ushort)scr.ExecutionType),
                             _opcodes.GetTypeInfo((ushort)scr.ReturnType).Name, scr.Name);

                // Write script parameter declarations.
                if (scr.Parameters?.Count > 0)
                {
                    output.Write(" (");
                    bool firstParam = true;
                    foreach (ScriptParameter param in scr.Parameters)
                    {
                        if (!firstParam)
                        {
                            output.Write(", ");
                        }
                        output.Write("{1} {0}", param.Name, _opcodes.GetTypeInfo((ushort)param.Type).Name);
                        firstParam = false;
                    }
                    output.WriteLine(")");
                }
                else
                {
                    output.WriteLine();
                }

                output.Indent++;

                // Write code.
                FollowRootIndex(output, scr.RootExpressionIndex, true, BranchType.InitialBegin);

                // Close parenthesis
                output.Indent = 0;
                output.WriteLine(")");
                output.WriteLine();
            }

            return(true);
        }
예제 #22
0
        private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url != null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);

            writer.Write("function ");
            writer.Write(service.Name);
            writer.WriteLine("(url)");
            writer.WriteLine("{");
            writer.Indent++;
            writer.WriteLine("var self = this;");

            Method[] methods = service.GetMethods();

            string[] methodNames = new string[methods.Length];
            bool[]   idempotents = new bool[methods.Length];

            for (int i = 0; i < methods.Length; i++)
            {
                methodNames[i] = methods[i].Name;
                idempotents[i] = methods[i].Idempotent;
            }

            writer.Write("var m = ");
            JsonConvert.Export(methodNames, writer);
            writer.WriteLine(';');
            writer.Write("var idems = ");
            JsonConvert.Export(idempotents, writer);
            writer.WriteLine(';');
            writer.WriteLine();

            for (int i = 0; i < methods.Length; i++)
            {
                Method method = methods[i];
                string index  = i.ToString(CultureInfo.InvariantCulture);

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if summary breaks over several lines?

                    writer.Write("// ");
                    writer.WriteLine(method.Description);
                    writer.WriteLine();
                }

                writer.Write("this[m[");
                writer.Write(index);
                writer.Write("]] = function /* ");
                writer.Write(method.Name);
                writer.Write(" */ (");

                Parameter[] parameters = method.GetParameters();

                foreach (Parameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback)");
                writer.WriteLine("{");
                writer.Indent++;

                writer.Write("if (self.kwargs) return rpc(new Call(");
                writer.Write(index);
                writer.Write(", {");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                    {
                        writer.Write(',');
                    }
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                    writer.Write(": ");
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" }, callback));");

                writer.Write("return rpc(new Call(");
                writer.Write(index);
                writer.Write(", [");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                    {
                        writer.Write(',');
                    }
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback));");

                writer.Indent--;
                writer.WriteLine("}");
                writer.WriteLine();
            }

            writer.Write("var url = typeof(url) === 'string' ? url : '");
            writer.Write(url.AbsolutePath);
            writer.WriteLine("';");
            writer.WriteLine(@"var nextId = 0;

    function Call(method, params, callback)
    {
        this.url = url;
        this.callback = callback;
        this.proxy = self;
        this.idempotent = idems[method];
        this.request = 
        { 
            id     : ++nextId, 
            method : m[method], 
            params : params 
        };
    }

    function rpc(call)
    {
        return self.channel != null && typeof(self.channel.rpc) === 'function' ?
            self.channel.rpc(call) : call;
    }

    this.kwargs = false;
    this.channel = new JayrockChannel();

    function JayrockChannel()
    {
        this.rpc = function(call)
        {
            var async = typeof(call.callback) === 'function';
            var xhr = newXHR();
            xhr.open('POST', call.url, async, this.httpUserName, this.httpPassword);
            xhr.setRequestHeader('Content-Type', this.contentType || 'application/json; charset=utf-8');
            xhr.setRequestHeader('X-JSON-RPC', call.request.method);
            if (async) xhr.onreadystatechange = function() { xhr_onreadystatechange(xhr, call.callback); }
            xhr.send(JSON.stringify(call.request));
            call.handler = xhr;
            if (async) return call;
            if (xhr.status != 200) throw new Error(xhr.status + ' ' + xhr.statusText);
            var response = JSON.parse(xhr.responseText);
            if (response.error != null) throw response.error;
            return response.result;
        }

        function xhr_onreadystatechange(sender, callback)
        {
            if (sender.readyState == /* complete */ 4)
            {
                try { 
                    sender.onreadystatechange = null; // Avoid IE7 leak (bug #12964)
                } 
                catch (e) { 
                    /* IE 6/Mobile throws for onreadystatechange = null */ 
                }

                var response = sender.status == 200 ? 
                    JSON.parse(sender.responseText) : {};
                
                callback(response, sender);
            }
        }

        function newXHR()
        {
            if (typeof(window) !== 'undefined' && window.XMLHttpRequest)
                return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */
            else
                return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */
        }
    }");

            writer.Indent--;
            writer.WriteLine("}");

            writer.WriteLine();
            writer.Write(service.Name);
            writer.Write(".rpcMethods = ");
            JsonConvert.Export(methodNames, writer);
            writer.WriteLine(";");
        }
예제 #23
0
 /// <summary>
 /// The decompiler generates a script parameter reference based on an expression.
 /// </summary>
 /// <param name="output">The output.</param>
 /// <param name="expression">The parameter reference expression.</param>
 /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param>
 /// <returns>Returns true if code was generated.</returns>
 private bool GenerateParameterReference(IndentedTextWriter output, ScriptExpression expression, bool newLine)
 {
     output.Write(expression.StringValue);
     HandleNewLine(output, newLine);
     return(true);
 }
예제 #24
0
        private void Version2(ServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url != null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);

            if (JsonRpcTrace.TraceWarning)
            {
                writer.WriteLine(@"// *** O B S O L E T E *** 
//
// You are using version 2 of the JavaScript proxy that MAY 
// be obsoleted and removed in the next release. The functionality has 
// been integrated into the original proxy version via the channel 
// property on the JavaScript proxy.
");
            }

            writer.WriteLine("// Proxy version 2.0");
            writer.WriteLine();

            writer.Write("var ");
            writer.Write(service.Name);
            writer.Write(@" = function()
{
    var nextId = 0;

    var proxy = {

        url : """);
            writer.Write(url.AbsolutePath);
            writer.Write(@""",
        rpc : {");
            writer.WriteLine();
            writer.Indent += 3;

            Method[] methods = service.GetMethods();

            string[] methodNames = new string[methods.Length];
            for (int i = 0; i < methods.Length; i++)
            {
                methodNames[i] = methods[i].Name;
            }

            Array.Sort(methodNames, methods);

            for (int i = 0; i < methods.Length; i++)
            {
                Method method = methods[i];

                writer.WriteLine();

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if /* and */ appear in the summary?

                    writer.Write("/* ");
                    writer.Write(method.Description);
                    writer.WriteLine(" */");
                    writer.WriteLine();
                }

                writer.Write('\"');
                writer.Write(method.Name);
                writer.Write("\" : function(");

                Parameter[] parameters = method.GetParameters();

                foreach (Parameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback) {");
                writer.Indent++;

                writer.Write("return new Call(\"");
                writer.Write(method.Name);
                writer.Write("\", [");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                    {
                        writer.Write(',');
                    }
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback);");

                writer.Indent--;
                writer.Write("}");
                if (i < (methods.Length - 1))
                {
                    writer.Write(',');
                }
                writer.WriteLine();
            }

            writer.Indent--;
            writer.WriteLine(@"}
    }

    function Call(method, params, callback)
    {
        this.url = proxy.url;
        this.callback = callback;
        this.request = 
        { 
            id     : ++nextId, 
            method : method, 
            params : params
        };
    }
    
    Call.prototype.call = function(channel) { return channel(this); }
    
    return proxy;
}();");

            writer.Indent--;
        }
        protected override void WriteCreateTable(CreateTableOperation createTableOperation, IndentedTextWriter writer)
        {
            NotNull(createTableOperation, "createTableOperation");
            NotNull(writer, "writer");

            var tableName = ParseDatabaseName(createTableOperation.Name);

            writer.Write("IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'");
            writer.Write(tableName.Item2);
            writer.Write("' AND TABLE_SCHEMA = N'");
            writer.Write(tableName.Item1);
            writer.WriteLine("')");
            writer.WriteLine("BEGIN");
            writer.Indent++;

            writer.WriteLine("CREATE TABLE " + Name(createTableOperation.Name) + " (");
            writer.Indent++;

            var i = 0;

            foreach (var columnModel in createTableOperation.Columns)
            {
                Generate(columnModel, writer);

                if (i < createTableOperation.Columns.Count - 1)
                {
                    writer.WriteLine(",");
                }
                i++;
            }

            if (createTableOperation.PrimaryKey != null)
            {
                writer.WriteLine(",");
                writer.Write("CONSTRAINT ");
                writer.Write(Quote(createTableOperation.PrimaryKey.Name));
                writer.Write(" PRIMARY KEY ");

                if (!createTableOperation.PrimaryKey.IsClustered)
                {
                    writer.Write("NONCLUSTERED ");
                }

                writer.Write("(");
                writer.Write(Join(createTableOperation.PrimaryKey.Columns.Select(Quote)));
                writer.WriteLine(")");
            }
            else
            {
                writer.WriteLine();
            }

            writer.Indent--;
            writer.WriteLine(")");

            writer.Indent--;
            writer.WriteLine("END");
            writer.WriteLine("ELSE");
            writer.WriteLine("BEGIN");
            writer.Indent++;

            foreach (var columnModel in createTableOperation.Columns)
            {
                var alterColumn = new AddColumnOperation(createTableOperation.Name, columnModel);

                WriteCreateColumn(alterColumn, writer);
            }

            writer.Indent--;
            writer.WriteLine("END");
        }
예제 #26
0
 // 4.2
 int IExpressionVisitor <int> .VisitThis()
 {
     _Writer.Write("this");
     return(0);
 }
예제 #27
0
 public void Dump(IndentedTextWriter w)
 {
     w.Write("CSMTextSettings: ");
     w.WriteLine();
 }
예제 #28
0
        /// <exception cref="ArgumentException">ターゲット型に同じ名前のデータメンバーが 2 つ以上存在します。</exception>
        public void AssertIs(AssertNode node)
        {
            var targetType = node.TargetType;
            var actual     = node.Actual;
            var expected   = node.Expected;

            _logger?.Write($"{node.MemberName}: {node.TargetType?.GetFriendlyName() ?? "(null)"} = ");
            try {
                if (TryPredicateAssertIs(targetType, actual, expected, node))
                {
                    return;
                }

                // null 比較
                if (targetType is null)
                {
                    if (!(actual is null))
                    {
                        throw new PrimitiveAssertFailedException(node, "ターゲット型は null ですが、actual は非 null です。", _message);
                    }
                    if (!(expected is null))
                    {
                        throw new PrimitiveAssertFailedException(node, "actual は null ですが、expected は非 null です。", _message);
                    }

                    WriteLog(node, "actual と expected はどちらも null です。");
                    return;
                }
                if (targetType.IsValueType && !targetType.IsNullable())
                {
                    if (actual is null)
                    {
                        throw new PrimitiveAssertFailedException(node, "ターゲット型は null 非許容型ですが、actual は null です。", _message);
                    }
                }
                if (actual is null)
                {
                    if (expected is null)
                    {
                        WriteLog(node, "actual と expected はどちらも null です。");
                        return;
                    }
                    else
                    {
                        throw new PrimitiveAssertFailedException(node, "actual は null ですが、expected が非 null です。", _message);
                    }
                }
                else
                {
                    if (expected is null)
                    {
                        throw new PrimitiveAssertFailedException(node, "actual は非 null ですが、expected が null です。", _message);
                    }
                }

                if (TryNumericAssertIs(targetType, actual, expected, node))
                {
                    return;
                }
                if (TryPrimitiveAssertIs(targetType, actual, expected, node))
                {
                    return;
                }
                if (TryReferenceAssertIs(targetType, actual, expected, node))
                {
                    return;
                }
                if (TryCircularReferenceAssertIs(targetType, actual, expected, node))
                {
                    return;
                }
            }
            catch (PrimitiveAssertFailedException) {
                _logger?.WriteLine();
                throw;
            }

            if (_logger != null)
            {
                _logger.WriteLine("{");
                _logger.Indent++;
            }
            if (TryCollectionAssertIs(targetType, actual, expected, node))
            {
                goto EndBlock;
            }
            if (TryCompositeAssertIs(targetType, actual, expected, node))
            {
                goto EndBlock;
            }
EndBlock:
            if (_logger != null)
            {
                _logger.Indent--;
                _logger.WriteLine("}");
            }
            return;
        }
예제 #29
0
        /// <summary>
        /// Generate column definition. Returns <c>true</c> if the column was the primary key.
        /// </summary>
        private bool Generate(ColumnModel column, IndentedTextWriter tw, PrimaryKeyOperation primaryKeyOp)
        {
            bool isIdPk = false;

            tw.Write(Format.ReservedWord(column.Name));
            tw.Write(" ");
            bool isPrimaryKey = false;

            if (primaryKeyOp != null)
            {
                isPrimaryKey = primaryKeyOp.Columns.Contains(column.Name);
            }

            if (isPrimaryKey)
            {
                if ((column.Type == PrimitiveTypeKind.Int16) ||
                    (column.Type == PrimitiveTypeKind.Int32))
                {
                    tw.Write("INTEGER");
                }
                else
                {
                    tw.Write(Format.BuildColumnType(_providerManifest, column));
                }

                if (column.IsIdentity || column.Annotations.ContainsKey("Autoincrement"))
                {
                    tw.Write(" PRIMARY KEY");
                    isIdPk = true;

                    if (column.Annotations.ContainsKey("Autoincrement"))
                    {
                        tw.Write(" AUTOINCREMENT");
                    }
                }
            }
            else
            {
                tw.Write(Format.BuildColumnType(_providerManifest, column));

                if ((column.IsNullable != null) &&
                    !column.IsNullable.Value)
                {
                    tw.Write(" NOT NULL");
                }

                if (column.DefaultValue != null)
                {
                    tw.Write(" DEFAULT ");
                    tw.Write(Generate((dynamic)column.DefaultValue));
                }
                else if (!string.IsNullOrWhiteSpace(column.DefaultValueSql))
                {
                    tw.Write(" DEFAULT ");
                    tw.Write("(" + column.DefaultValueSql + ")");
                }

                AnnotationValues uniqueAnnotation;
                if (column.Annotations.TryGetValue("Unique", out uniqueAnnotation))
                {
                    tw.Write(" UNIQUE" + Format.UniqueConflictText(uniqueAnnotation));
                }

                AnnotationValues collateAnnotation;
                if (column.Annotations.TryGetValue("Collate", out collateAnnotation))
                {
                    tw.Write(Format.CollateFunctionText(collateAnnotation));
                }
            }

            return(isIdPk);
        }
예제 #30
0
        /// <summary>
        /// Outputs the C++ code for the given class to the <see cref="TextWriter"/> instance.
        /// </summary>
        /// <param name="writer">The writer to output to.</param>
        /// <param name="class">The class to output.</param>
        /// <param name="classes">The list of all available classes.</param>
        /// <param name="logger">The logger.</param>
        private void WriteClass(IndentedTextWriter writer, ClassNode @class, IEnumerable <ClassNode> classes, ILogger logger)
        {
            Contract.Requires(writer != null);
            Contract.Requires(@class != null);
            Contract.Requires(classes != null);

            writer.Write("class ");
            writer.Write(@class.Name);

            var skipFirstMember = false;

            if (@class.Nodes.FirstOrDefault() is ClassInstanceNode inheritedFromNode)
            {
                skipFirstMember = true;

                writer.Write(" : public ");
                writer.Write(inheritedFromNode.InnerNode.Name);
            }

            if (!string.IsNullOrEmpty(@class.Comment))
            {
                writer.Write(" // ");
                writer.Write(@class.Comment);
            }

            writer.WriteLine();

            writer.WriteLine("{");
            writer.WriteLine("public:");
            writer.Indent++;

            var nodes = @class.Nodes
                        .Skip(skipFirstMember ? 1 : 0)
                        .WhereNot(n => n is FunctionNode);

            WriteNodes(writer, nodes, logger);

            var vTableNodes = @class.Nodes.OfType <VirtualMethodTableNode>().ToList();

            if (vTableNodes.Any())
            {
                writer.WriteLine();

                var virtualMethodNodes = vTableNodes
                                         .SelectMany(vt => vt.Nodes)
                                         .OfType <VirtualMethodNode>();
                foreach (var node in virtualMethodNodes)
                {
                    writer.Write("virtual void ");
                    writer.Write(node.MethodName);
                    writer.WriteLine("();");
                }
            }

            var functionNodes = classes
                                .SelectMany(c2 => c2.Nodes)
                                .OfType <FunctionNode>()
                                .Where(f => f.BelongsToClass == @class)
                                .ToList();

            if (functionNodes.Any())
            {
                writer.WriteLine();

                foreach (var node in functionNodes)
                {
                    writer.Write(node.Signature);
                    writer.WriteLine("{ }");
                }
            }

            writer.Indent--;
            writer.Write("}; //Size: 0x");
            writer.WriteLine($"{@class.MemorySize:X04}");
        }
        private void Version2(JsonRpcServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url!= null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);
 
            writer.WriteLine("// Proxy version 2.0");
            writer.WriteLine();
 
            writer.Write("var ");
            writer.Write(service.Name);
            writer.Write(@" = function()
{
    var nextId = 0;

    var proxy = {

        url : """);
            writer.Write(url);
            writer.Write(@""",
        rpc : {");
            writer.WriteLine();
            writer.Indent += 3;
    
            JsonRpcMethod[] methods = service.GetMethods();
            
            string[] methodNames = new string[methods.Length];
            for (int i = 0; i < methods.Length; i++)
                methodNames[i] = methods[i].Name;
            
            Array.Sort(methodNames, methods);
    
            for (int i = 0; i < methods.Length; i++)
            {
                JsonRpcMethod method = methods[i];

                writer.WriteLine();

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if /* and */ appear in the summary?

                    writer.Write("/* ");
                    writer.Write(method.Description);
                    writer.WriteLine(" */");
                    writer.WriteLine();
                }

                writer.Write('\"');
                writer.Write(method.Name);
                writer.Write("\" : function(");

                JsonRpcParameter[] parameters = method.GetParameters();
                
                foreach (JsonRpcParameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback) {");
                writer.Indent++;

                writer.Write("return new Call(\"");
                writer.Write(method.Name);
                writer.Write("\", [");

                foreach (JsonRpcParameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(',');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback);");

                writer.Indent--;
                writer.Write("}");
                if (i < (methods.Length - 1))
                    writer.Write(',');
                writer.WriteLine();
            }
    
            writer.Indent--;
            writer.WriteLine(@"}
    }

    function Call(method, params, callback)
    {
        this.url = proxy.url;
        this.callback = callback;
        this.request = 
        { 
            id     : ++nextId, 
            method : method, 
            params : params 
        };
    }
    
    Call.prototype.call = function(channel) { return channel(this); }
    
    return proxy;
}();");
    
            writer.Indent--;
        }
예제 #32
0
        public override void HandleMcpeStartGame(McpeStartGame message)
        {
            Client.EntityId        = message.runtimeEntityId;
            Client.NetworkEntityId = message.entityIdSelf;
            Client.SpawnPoint      = message.spawn;
            Client.CurrentLocation = new PlayerLocation(Client.SpawnPoint, message.rotation.X, message.rotation.X, message.rotation.Y);

            BlockPalette blockPalette = message.blockPalette;

            Client.BlockPalette = message.blockPalette;

            //var blockPalette = BlockFactory.BlockStates;
            Log.Warn($"Got position from startgame packet: {Client.CurrentLocation}");

            var settings = new JsonSerializerSettings
            {
                PreserveReferencesHandling = PreserveReferencesHandling.Arrays,
                TypeNameHandling           = TypeNameHandling.Auto,
                Formatting           = Formatting.Indented,
                DefaultValueHandling = DefaultValueHandling.Include
            };

            var fileNameItemstates = Path.GetTempPath() + "itemstates_" + Guid.NewGuid() + ".json";

            File.WriteAllText(fileNameItemstates, JsonConvert.SerializeObject(message.itemstates, settings));

            string fileName = Path.GetTempPath() + "MissingBlocks_" + Guid.NewGuid() + ".txt";

            using (FileStream file = File.OpenWrite(fileName))
            {
                var writer = new IndentedTextWriter(new StreamWriter(file));

                Log.Warn($"BlockPalette ({blockPalette.Count}) Filename:\n{fileName}");

                writer.WriteLine($"namespace MiNET.Blocks");
                writer.WriteLine($"{{");
                writer.Indent++;

                var blocks = new List <(int, string)>();

                foreach (IGrouping <string, BlockStateContainer> blockstateGrouping in blockPalette.OrderBy(record => record.Name).ThenBy(record => record.Data).ThenBy(record => record.RuntimeId).GroupBy(record => record.Name))
                {
                    BlockStateContainer currentBlockState = blockstateGrouping.First();
                    Log.Debug($"{currentBlockState.Name}, Id={currentBlockState.Id}");
                    BlockStateContainer defaultBlockState = BlockFactory.GetBlockById(currentBlockState.Id, 0)?.GetGlobalState();
                    if (defaultBlockState == null)
                    {
                        defaultBlockState = blockstateGrouping.FirstOrDefault(bs => bs.Data == 0);
                    }

                    Log.Debug($"{currentBlockState.RuntimeId}, {currentBlockState.Name}, {currentBlockState.Data}");
                    Block blockById     = BlockFactory.GetBlockById(currentBlockState.Id);
                    bool  existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated;
                    int   id            = existingBlock ? currentBlockState.Id : -1;

                    string blockClassName = CodeName(currentBlockState.Name.Replace("minecraft:", ""), true);

                    blocks.Add((blockById.Id, blockClassName));
                    writer.WriteLineNoTabs($"");

                    writer.WriteLine($"public partial class {blockClassName} // {blockById.Id} typeof={blockById.GetType().Name}");
                    writer.WriteLine($"{{");
                    writer.Indent++;

                    writer.WriteLine($"public override string Name => \"{currentBlockState.Name}\";");
                    writer.WriteLineNoTabs("");

                    var bits = new List <BlockStateByte>();
                    foreach (var state in blockstateGrouping.First().States)
                    {
                        var q = blockstateGrouping.SelectMany(c => c.States);

                        // If this is on base, skip this property. We need this to implement common functionality.
                        Type baseType     = blockById.GetType().BaseType;
                        bool propOverride = baseType != null &&
                                            ("Block" != baseType.Name &&
                                             baseType.GetProperty(CodeName(state.Name, true)) != null);

                        switch (state)
                        {
                        case BlockStateByte blockStateByte:
                        {
                            var  values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateByte)d).Value).Distinct().OrderBy(s => s).ToList();
                            byte defaultVal = ((BlockStateByte)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? 0;
                            if (values.Min() == 0 && values.Max() == 1)
                            {
                                bits.Add(blockStateByte);
                                writer.Write($"[StateBit] ");
                                writer.WriteLine($"public{(propOverride ? " override" : "")} bool {CodeName(state.Name, true)} {{ get; set; }} = {(defaultVal == 1 ? "true" : "false")};");
                            }
                            else
                            {
                                writer.Write($"[StateRange({values.Min()}, {values.Max()})] ");
                                writer.WriteLine($"public{(propOverride ? " override" : "")} byte {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};");
                            }
                            break;
                        }

                        case BlockStateInt blockStateInt:
                        {
                            var values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateInt)d).Value).Distinct().OrderBy(s => s).ToList();
                            int defaultVal = ((BlockStateInt)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? 0;
                            writer.Write($"[StateRange({values.Min()}, {values.Max()})] ");
                            writer.WriteLine($"public{(propOverride ? " override" : "")} int {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};");
                            break;
                        }

                        case BlockStateString blockStateString:
                        {
                            var    values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateString)d).Value).Distinct().ToList();
                            string defaultVal = ((BlockStateString)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? "";
                            if (values.Count > 1)
                            {
                                writer.WriteLine($"[StateEnum({string.Join(',', values.Select(v => $"\"{v}\""))})]");
                            }
                            writer.WriteLine($"public{(propOverride ? " override" : "")} string {CodeName(state.Name, true)} {{ get; set; }} = \"{defaultVal}\";");
                            break;
                        }

                        default:
                            throw new ArgumentOutOfRangeException(nameof(state));
                        }
                    }

                    // Constructor

                    //if (id == -1 || blockById.IsGenerated)
                    //{
                    //	writer.WriteLine($"");

                    //	writer.WriteLine($"public {blockClassName}() : base({currentBlockState.Id})");
                    //	writer.WriteLine($"{{");
                    //	writer.Indent++;
                    //	writer.WriteLine($"IsGenerated = true;");
                    //	writer.WriteLine($"SetGenerated();");
                    //	writer.Indent--;
                    //	writer.WriteLine($"}}");
                    //}

                    writer.WriteLineNoTabs($"");
                    writer.WriteLine($"public override void SetState(List<IBlockState> states)");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"foreach (var state in states)");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"switch(state)");
                    writer.WriteLine($"{{");
                    writer.Indent++;

                    foreach (var state in blockstateGrouping.First().States)
                    {
                        writer.WriteLine($"case {state.GetType().Name} s when s.Name == \"{state.Name}\":");
                        writer.Indent++;
                        writer.WriteLine($"{CodeName(state.Name, true)} = {(bits.Contains(state) ? "Convert.ToBoolean(s.Value)" : "s.Value")};");
                        writer.WriteLine($"break;");
                        writer.Indent--;
                    }

                    writer.Indent--;
                    writer.WriteLine($"}} // switch");
                    writer.Indent--;
                    writer.WriteLine($"}} // foreach");
                    writer.Indent--;
                    writer.WriteLine($"}} // method");

                    writer.WriteLineNoTabs($"");
                    writer.WriteLine($"public override BlockStateContainer GetState()");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"var record = new BlockStateContainer();");
                    writer.WriteLine($"record.Name = \"{blockstateGrouping.First().Name}\";");
                    writer.WriteLine($"record.Id = {blockstateGrouping.First().Id};");
                    foreach (var state in blockstateGrouping.First().States)
                    {
                        string propName = CodeName(state.Name, true);
                        writer.WriteLine($"record.States.Add(new {state.GetType().Name} {{Name = \"{state.Name}\", Value = {(bits.Contains(state) ? $"Convert.ToByte({propName})" : propName)}}});");
                    }
                    writer.WriteLine($"return record;");
                    writer.Indent--;
                    writer.WriteLine($"}} // method");
                    writer.Indent--;
                    writer.WriteLine($"}} // class");
                }

                writer.WriteLine();

                foreach (var block in blocks.OrderBy(tuple => tuple.Item1))
                {
                    int clazzId = block.Item1;

                    Block blockById     = BlockFactory.GetBlockById(clazzId);
                    bool  existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated;
                    if (existingBlock)
                    {
                        continue;
                    }

                    string clazzName = block.Item2;
                    string baseClazz = clazzName.EndsWith("Stairs") ? "BlockStairs" : "Block";
                    baseClazz = clazzName.EndsWith("Slab") && !clazzName.EndsWith("DoubleSlab")? "SlabBase" : baseClazz;
                    writer.WriteLine($"public partial class {clazzName} : {baseClazz} {{ " +
                                     $"public {clazzName}() : base({clazzId}) {{ IsGenerated = true; }} " +
                                     $"}}");
                }

                writer.Indent--;
                writer.WriteLine($"}}");                 // namespace

                //foreach (var block in blocks.OrderBy(tuple => tuple.Item1))
                //{
                //	// 495 => new StrippedCrimsonStem(),
                //	writer.WriteLine($"\t\t\t\t{block.Item1} => new {block.Item2}(),");
                //}

                writer.Flush();
            }

            LogGamerules(message.gamerules);

            Client.LevelInfo.LevelName = "Default";
            Client.LevelInfo.Version   = 19133;
            Client.LevelInfo.GameType  = message.gamemode;

            //ClientUtils.SaveLevel(_level);

            {
                var packet = McpeRequestChunkRadius.CreateObject();
                Client.ChunkRadius = 5;
                packet.chunkRadius = Client.ChunkRadius;

                Client.SendPacket(packet);
            }
        }
        private static void Version1(JsonRpcServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url!= null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);

            writer.WriteLine("// Proxy version 1.0");
            writer.WriteLine();

            writer.Write("function ");
            writer.Write(service.Name);
            writer.WriteLine("(url)");
            writer.WriteLine("{");
            writer.Indent++;
    
            JsonRpcMethod[] methods = service.GetMethods();
            string[] methodNames = new string[methods.Length];
    
            for (int i = 0; i < methods.Length; i++)
            {
                JsonRpcMethod method = methods[i];
                methodNames[i] = method.Name;

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if /* and */ appear in the summary?

                    writer.Write("/* ");
                    writer.Write(method.Description);
                    writer.WriteLine(" */");
                    writer.WriteLine();
                }

                writer.Write("this[\"");
                writer.Write(method.Name);
                writer.Write("\"] = function(");

                JsonRpcParameter[] parameters = method.GetParameters();
                
                foreach (JsonRpcParameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback)");
                writer.WriteLine("{");
                writer.Indent++;

                writer.Write("return call(\"");
                writer.Write(method.Name);
                writer.Write("\", [");

                foreach (JsonRpcParameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(',');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback);");

                writer.Indent--;
                writer.WriteLine("}");
                writer.WriteLine();
            }
    
            writer.Write("var url = typeof(url) === 'string' ? url : '");
            writer.Write(url);
            writer.WriteLine("';");
            writer.WriteLine(@"var self = this;
    var nextId = 0;

    function call(method, params, callback)
    {
        var request = { id : nextId++, method : method, params : params };
        return callback == null ? 
            callSync(method, request) : callAsync(method, request, callback);
    }

    function callSync(method, request)
    {
        var http = newHTTP();
        http.open('POST', url, false, self.httpUserName, self.httpPassword);
        setupHeaders(http, method);
        http.send(JSON.stringify(request));
        if (http.status != 200)
            throw { message : http.status + ' ' + http.statusText, toString : function() { return message; } };
        var response = JSON.eval(http.responseText);
        if (response.error != null) throw response.error;
        return response.result;
    }

    function callAsync(method, request, callback)
    {
        var http = newHTTP();
        http.open('POST', url, true, self.httpUserName, self.httpPassword);
        setupHeaders(http, method);
        http.onreadystatechange = function() { http_onreadystatechange(http, callback); }
        http.send(JSON.stringify(request));
        return request.id;
    }

    function setupHeaders(http, method)
    {
        http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8');
        http.setRequestHeader('X-JSON-RPC', method);
    }

    function http_onreadystatechange(sender, callback)
    {
        if (sender.readyState == /* complete */ 4)
        {
            var response = sender.status == 200 ? 
                JSON.eval(sender.responseText) : {};
            
            response.xmlHTTP = sender;
                
            callback(response);
        }
    }

    function newHTTP()
    {
        return typeof(ActiveXObject) === 'function' ? 
            new ActiveXObject('Microsoft.XMLHTTP') : /* IE 5 */
            new XMLHttpRequest(); /* Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */
    }");
    
            writer.Indent--;
            writer.WriteLine("}");
    
            writer.WriteLine();
            writer.Write(service.Name);
            writer.Write(".rpcMethods = ");
            JsonTextWriter jsonWriter = new JsonTextWriter(writer);
            jsonWriter.WriteArray(methodNames);
            writer.WriteLine(";");
        }
예제 #34
0
        private void DecompileScripts(object streamManager)
        {
            DateTime startTime = DateTime.Now;

            ScriptTable scripts;

            using (IReader reader = ((IStreamManager)streamManager).OpenRead())
            {
                scripts = _scriptFile.LoadScripts(reader);
                if (scripts == null)
                {
                    return;
                }
            }

            OpcodeLookup opcodes   = _buildInfo.ScriptInfo;
            var          generator = new BlamScriptGenerator(scripts, opcodes, _endian);
            var          code      = new IndentedTextWriter(new StringWriter());

            generator.WriteComment("Decompiled with Assembly", code);
            generator.WriteComment("", code);
            generator.WriteComment("Source file: " + _scriptFile.Name, code);
            generator.WriteComment("Start time: " + startTime, code);
            generator.WriteComment("", code);
            generator.WriteComment("Remember that all script code is property of Bungie/343 Industries.", code);
            generator.WriteComment("You have no rights. Play nice.", code);
            code.WriteLine();

            int counter = 0;

            if (scripts.Variables != null)
            {
                generator.WriteComment("VARIABLES", code);
                foreach (ScriptGlobal variable in scripts.Variables)
                {
                    code.Write("(variable {0} {1} ", opcodes.GetTypeInfo((ushort)variable.Type).Name, variable.Name);
                    generator.WriteExpression(variable.ExpressionIndex, code);
                    if (_showInfo)
                    {
                        code.WriteLine(")\t\t; Index: {0}, Expression Index: {1}", counter.ToString(), variable.ExpressionIndex.Index.ToString());
                    }
                    else
                    {
                        code.WriteLine(")");
                    }
                    counter++;
                }
                code.WriteLine();
                counter = 0;
            }

            generator.WriteComment("GLOBALS", code);
            foreach (ScriptGlobal global in scripts.Globals)
            {
                code.Write("(global {0} {1} ", opcodes.GetTypeInfo((ushort)global.Type).Name, global.Name);
                generator.WriteExpression(global.ExpressionIndex, code);
                if (_showInfo)
                {
                    code.WriteLine(")\t\t; Index: {0}, Expression Index: {1}", counter.ToString(), global.ExpressionIndex.Index.ToString());
                }
                else
                {
                    code.WriteLine(")");
                }
                counter++;
            }
            code.WriteLine();
            counter = 0;

            generator.WriteComment("SCRIPTS", code);
            foreach (Script script in scripts.Scripts)
            {
                if (_showInfo)
                {
                    generator.WriteComment(string.Format("Index: {0}, Expression Index: {1}", counter.ToString(), script.RootExpressionIndex.Index.ToString()), code);
                }

                code.Write("(script {0} {1} ", opcodes.GetScriptTypeName((ushort)script.ExecutionType),
                           opcodes.GetTypeInfo((ushort)script.ReturnType).Name);

                if (script.Parameters.Count > 0)
                {
                    code.Write("({0} (", script.Name);

                    bool firstParam = true;
                    foreach (ScriptParameter param in script.Parameters)
                    {
                        if (!firstParam)
                        {
                            code.Write(", ");
                        }
                        code.Write("{1} {0}", param.Name, opcodes.GetTypeInfo((ushort)param.Type).Name);
                        firstParam = false;
                    }

                    code.Write("))");
                }
                else
                {
                    code.Write(script.Name);
                }

                code.Indent++;
                code.WriteLine();
                generator.WriteExpression(script.RootExpressionIndex, code, _buildInfo.HeaderSize == 0x1E000);
                code.Indent--;

                code.WriteLine();
                code.WriteLine(")");
                code.WriteLine();
                counter++;
            }

            DateTime endTime  = DateTime.Now;
            TimeSpan duration = endTime.Subtract(startTime);

            generator.WriteComment("Decompilation finished in ~" + duration.TotalSeconds + "s", code);

            Dispatcher.Invoke(new Action(delegate { txtScript.Text = code.InnerWriter.ToString(); }));
        }
예제 #35
0
 public override void ToString(IndentedTextWriter writer)
 {
     Operand.ToString(writer);
     writer.Write("[{0} ...]", Start);
 }
예제 #36
0
 //===========================================================================================
 protected static void WriteType(IndentedTextWriter writer, Type type)
 {
     writer.Write(GraphicsMagickNET.GetTypeName(type));
 }
예제 #37
0
        private void Version2(ServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url!= null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);
            
            if (JsonRpcTrace.TraceWarning)
            {
                writer.WriteLine(@"// *** O B S O L E T E *** 
//
// You are using version 2 of the JavaScript proxy that MAY 
// be obsoleted and removed in the next release. The functionality has 
// been integrated into the original proxy version via the channel 
// property on the JavaScript proxy.
");
            }
 
            writer.WriteLine("// Proxy version 2.0");
            writer.WriteLine();
 
            writer.Write("var ");
            writer.Write(service.Name);
            writer.Write(@" = function()
{
    var nextId = 0;

    var proxy = {

        url : """);
            writer.Write(url);
            writer.Write(@""",
        rpc : {");
            writer.WriteLine();
            writer.Indent += 3;
    
            Method[] methods = service.GetMethods();
            
            string[] methodNames = new string[methods.Length];
            for (int i = 0; i < methods.Length; i++)
                methodNames[i] = methods[i].Name;
            
            Array.Sort(methodNames, methods);
    
            for (int i = 0; i < methods.Length; i++)
            {
                Method method = methods[i];

                writer.WriteLine();

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if /* and */ appear in the summary?

                    writer.Write("/* ");
                    writer.Write(method.Description);
                    writer.WriteLine(" */");
                    writer.WriteLine();
                }

                writer.Write('\"');
                writer.Write(method.Name);
                writer.Write("\" : function(");

                Parameter[] parameters = method.GetParameters();
                
                foreach (Parameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback) {");
                writer.Indent++;

                writer.Write("return new Call(\"");
                writer.Write(method.Name);
                writer.Write("\", [");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(',');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback);");

                writer.Indent--;
                writer.Write("}");
                if (i < (methods.Length - 1))
                    writer.Write(',');
                writer.WriteLine();
            }
    
            writer.Indent--;
            writer.WriteLine(@"}
    }

    function Call(method, params, callback)
    {
        this.url = proxy.url;
        this.callback = callback;
        this.request = 
        { 
            id     : ++nextId, 
            method : method, 
            params : params
        };
    }
    
    Call.prototype.call = function(channel) { return channel(this); }
    
    return proxy;
}();");
    
            writer.Indent--;
        }
예제 #38
0
        public override void HandleMcpeStartGame(McpeStartGame message)
        {
            Client.EntityId        = message.runtimeEntityId;
            Client.NetworkEntityId = message.entityIdSelf;
            Client.SpawnPoint      = message.spawn;
            Client.CurrentLocation = new PlayerLocation(Client.SpawnPoint, message.rotation.X, message.rotation.X, message.rotation.Y);

            BlockPalette blockPalette = message.blockPalette;

            Client.BlockPalette = blockPalette;

            Log.Warn($"Got position from startgame packet: {Client.CurrentLocation}");


            //var fileNameBlockstates = Path.GetTempPath() + "blockstates_" + Guid.NewGuid() + ".json";
            var fileNameItemstates = Path.GetTempPath() + "itemstates_" + Guid.NewGuid() + ".json";

            File.WriteAllText(fileNameItemstates, JsonConvert.SerializeObject(message.itemstates));

            string fileName = Path.GetTempPath() + "MissingBlocks_" + Guid.NewGuid() + ".txt";

            using (FileStream file = File.OpenWrite(fileName))
            {
                var writer = new IndentedTextWriter(new StreamWriter(file));

                Log.Warn($"Directory:\n{Path.GetTempPath()}");
                Log.Warn($"Filename:\n{fileName}");

                writer.WriteLine($"namespace MiNET.Blocks");
                writer.WriteLine($"{{");
                writer.Indent++;

                var blocks = new List <(int, string)>();

                foreach (IGrouping <string, BlockStateContainer> blockstateGrouping in blockPalette.OrderBy(record => record.Name).ThenBy(record => record.Data).GroupBy(record => record.Name))
                {
                    var currentBlockState = blockstateGrouping.First();
                    var defaultBlockState = blockstateGrouping.FirstOrDefault(bs => bs.Data == 0);

                    Log.Debug($"{currentBlockState.RuntimeId}, {currentBlockState.Name}, {currentBlockState.Data}");
                    Block blockById     = BlockFactory.GetBlockById(currentBlockState.Id);
                    bool  existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated;
                    int   id            = existingBlock ? currentBlockState.Id : -1;

                    string blockClassName = CodeName(currentBlockState.Name.Replace("minecraft:", ""), true);

                    blocks.Add((blockById.Id, blockClassName));
                    writer.WriteLineNoTabs($"");

                    writer.WriteLine($"public partial class {blockClassName} {(existingBlock ? "" : ": Block")} // {blockById.Id} typeof={blockById.GetType().Name}");
                    writer.WriteLine($"{{");
                    writer.Indent++;

                    var bits = new List <BlockStateByte>();
                    foreach (var state in blockstateGrouping.First().States)
                    {
                        var q = blockstateGrouping.SelectMany(c => c.States);

                        // If this is on base, skip this property. We need this to implement common functionality.
                        Type baseType     = blockById.GetType().BaseType;
                        bool propOverride = baseType != null &&
                                            ("Block" != baseType.Name &&
                                             baseType.GetProperty(CodeName(state.Name, true)) != null);

                        switch (state)
                        {
                        case BlockStateByte blockStateByte:
                        {
                            var  values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateByte)d).Value).Distinct().OrderBy(s => s).ToList();
                            byte defaultVal = ((BlockStateByte)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? 0;
                            if (values.Min() == 0 && values.Max() == 1)
                            {
                                bits.Add(blockStateByte);
                                writer.Write($"[StateBit] ");
                                writer.WriteLine($"public {(propOverride ? "override" : "")} bool {CodeName(state.Name, true)} {{ get; set; }} = {(defaultVal == 1 ? "true" : "false")};");
                            }
                            else
                            {
                                writer.Write($"[StateRange({values.Min()}, {values.Max()})] ");
                                writer.WriteLine($"public {(propOverride ? "override" : "")} byte {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};");
                            }
                            break;
                        }

                        case BlockStateInt blockStateInt:
                        {
                            var values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateInt)d).Value).Distinct().OrderBy(s => s).ToList();
                            int defaultVal = ((BlockStateInt)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? 0;
                            writer.Write($"[StateRange({values.Min()}, {values.Max()})] ");
                            writer.WriteLine($"public {(propOverride ? "override" : "")} int {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};");
                            break;
                        }

                        case BlockStateString blockStateString:
                        {
                            var    values     = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateString)d).Value).Distinct().ToList();
                            string defaultVal = ((BlockStateString)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? "";
                            if (values.Count > 1)
                            {
                                writer.WriteLine($"[StateEnum({string.Join(',', values.Select(v => $"\"{v}\""))})]");
                            }
                            writer.WriteLine($"public {(propOverride ? "override" : "")} string {CodeName(state.Name, true)} {{ get; set; }} = \"{defaultVal}\";");
                            break;
                        }

                        default:
                            throw new ArgumentOutOfRangeException(nameof(state));
                        }
                    }

                    if (id == -1 || blockById.IsGenerated)
                    {
                        writer.WriteLine($"");

                        writer.WriteLine($"public {blockClassName}() : base({currentBlockState.Id})");
                        writer.WriteLine($"{{");
                        writer.Indent++;
                        writer.WriteLine($"IsGenerated = true;");
                        writer.Indent--;
                        writer.WriteLine($"}}");
                    }

                    writer.WriteLineNoTabs($"");
                    writer.WriteLine($"public override void SetState(List<IBlockState> states)");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"foreach (var state in states)");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"switch(state)");
                    writer.WriteLine($"{{");
                    writer.Indent++;

                    foreach (var state in blockstateGrouping.First().States)
                    {
                        writer.WriteLine($"case {state.GetType().Name} s when s.Name == \"{state.Name}\":");
                        writer.Indent++;
                        writer.WriteLine($"{CodeName(state.Name, true)} = {(bits.Contains(state) ? "Convert.ToBoolean(s.Value)" : "s.Value")};");
                        writer.WriteLine($"break;");
                        writer.Indent--;
                    }

                    writer.Indent--;
                    writer.WriteLine($"}} // switch");
                    writer.Indent--;
                    writer.WriteLine($"}} // foreach");
                    writer.Indent--;
                    writer.WriteLine($"}} // method");

                    writer.WriteLineNoTabs($"");
                    writer.WriteLine($"public override BlockStateContainer GetState()");
                    writer.WriteLine($"{{");
                    writer.Indent++;
                    writer.WriteLine($"var record = new BlockStateContainer();");
                    writer.WriteLine($"record.Name = \"{blockstateGrouping.First().Name}\";");
                    writer.WriteLine($"record.Id = {blockstateGrouping.First().Id};");
                    foreach (var state in blockstateGrouping.First().States)
                    {
                        string propName = CodeName(state.Name, true);
                        writer.WriteLine($"record.States.Add(new {state.GetType().Name} {{Name = \"{state.Name}\", Value = {(bits.Contains(state) ? $"Convert.ToByte({propName})" : propName)}}});");
                    }
                    writer.WriteLine($"return record;");
                    writer.Indent--;
                    writer.WriteLine($"}} // method");

                    //writer.WriteLine($"");

                    //writer.WriteLine($"public byte GetMetadataFromState()");
                    //writer.WriteLine($"{{");
                    //writer.Indent++;

                    //writer.WriteLine($"switch(this)");
                    //writer.WriteLine($"{{");
                    //writer.Indent++;


                    //i = 0;
                    //foreach (var record in message.BlockPalette.Where(b => b.Id == enumerator.Current.Id).OrderBy(b => b.Data))
                    //{
                    //	//case { } b when b.ButtonPressedBit == 0 && b.FacingDirection == 0:
                    //	//	return 0;

                    //	writer.Write($"case {{ }} b when true");
                    //	string retVal = "";
                    //	foreach (var state in record.States.OrderBy(s => s.Name).ThenBy(s => s.Value))
                    //	{
                    //		if (state.Type == (byte) NbtTagType.Byte)
                    //		{
                    //			writer.Write($" && b.{Client.CodeName(state.Name, true)} == {state.Value}");
                    //		}
                    //		else if (state.Type == (byte) NbtTagType.Int)
                    //		{
                    //			writer.Write($" && b.{Client.CodeName(state.Name, true)} == {state.Value}");
                    //		}
                    //		else if (state.Type == (byte) NbtTagType.String)
                    //		{
                    //			writer.Write($" && b.{Client.CodeName(state.Name, true)} == \"{state.Value}\"");
                    //		}
                    //	}
                    //	writer.WriteLine($":");

                    //	writer.Indent++;
                    //	writer.WriteLine($"return { i++ };");
                    //	writer.Indent--;
                    //}

                    //writer.Indent--;
                    //writer.WriteLine($"}} // switch");

                    //writer.WriteLine($"throw new ArithmeticException(\"Invalid state. Unable to convert state to valid metadata\");");

                    //writer.Indent--;
                    //writer.WriteLine($"}} // method");

                    writer.Indent--;
                    writer.WriteLine($"}} // class");
                }

                writer.Indent--;
                writer.WriteLine($"}}");

                foreach (var block in blocks.OrderBy(tuple => tuple.Item1))
                {
                    writer.WriteLine($"else if (blockId == {block.Item1}) block = new {block.Item2}();");
                }

                writer.Flush();
            }

            //			Log.Debug($@"
            //StartGame:
            //	entityId: {message.entityIdSelf}
            //	runtimeEntityId: {message.runtimeEntityId}
            //	spawn: {message.spawn}
            //	unknown1: {message.unknown1}
            //	dimension: {message.dimension}
            //	generator: {message.generator}
            //	gamemode: {message.gamemode}
            //	difficulty: {message.difficulty}
            //	hasAchievementsDisabled: {message.hasAchievementsDisabled}
            //	dayCycleStopTime: {message.dayCycleStopTime}
            //	eduMode: {message.eduMode}
            //	rainLevel: {message.rainLevel}
            //	lightnigLevel: {message.lightnigLevel}
            //	enableCommands: {message.enableCommands}
            //	isTexturepacksRequired: {message.isTexturepacksRequired}
            //	secret: {message.levelId}
            //	worldName: {message.worldName}
            //");

            LogGamerules(message.gamerules);

            Client.LevelInfo.LevelName = "Default";
            Client.LevelInfo.Version   = 19133;
            Client.LevelInfo.GameType  = message.gamemode;

            //ClientUtils.SaveLevel(_level);

            {
                var packet = McpeRequestChunkRadius.CreateObject();
                Client.ChunkRadius = 5;
                packet.chunkRadius = Client.ChunkRadius;

                Client.SendPacket(packet);
            }
        }
예제 #39
0
        private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer)
        {
            Debug.Assert(service != null);
            Debug.Assert(url!= null);
            Debug.Assert(!url.IsFile);
            Debug.Assert(writer != null);

            writer.Write("function ");
            writer.Write(service.Name);
            writer.WriteLine("(url)");
            writer.WriteLine("{");
            writer.Indent++;
            writer.WriteLine("var self = this;");
            
            Method[] methods = service.GetMethods();
            
            string[] methodNames = new string[methods.Length];
            bool[] idempotents = new bool[methods.Length];

            for (int i = 0; i < methods.Length; i++)
            {
                methodNames[i] = methods[i].Name;
                idempotents[i] = methods[i].Idempotent;
            }

            writer.Write("var m = ");
            JsonConvert.Export(methodNames, writer);
            writer.WriteLine(';');
            writer.Write("var idems = ");
            JsonConvert.Export(idempotents, writer);
            writer.WriteLine(';');
            writer.WriteLine();
    
            for (int i = 0; i < methods.Length; i++)
            {
                Method method = methods[i];
                string index = i.ToString(CultureInfo.InvariantCulture);

                if (method.Description.Length > 0)
                {
                    // TODO: What to do if summary breaks over several lines?

                    writer.Write("// ");
                    writer.WriteLine(method.Description);
                    writer.WriteLine();
                }

                writer.Write("this[m[");
                writer.Write(index);
                writer.Write("]] = function /* "); 
                writer.Write(method.Name);
                writer.Write(" */ (");

                Parameter[] parameters = method.GetParameters();
                
                foreach (Parameter parameter in parameters)
                {
                    writer.Write(parameter.Name);
                    writer.Write(", ");
                }

                writer.WriteLine("callback)");
                writer.WriteLine("{");
                writer.Indent++;

                writer.Write("if (self.kwargs) return rpc(new Call(");
                writer.Write(index);
                writer.Write(", {");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(',');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                    writer.Write(": ");
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" }, callback));");

                writer.Write("return rpc(new Call(");
                writer.Write(index);
                writer.Write(", [");

                foreach (Parameter parameter in parameters)
                {
                    if (parameter.Position > 0)
                        writer.Write(',');
                    writer.Write(' ');
                    writer.Write(parameter.Name);
                }

                writer.WriteLine(" ], callback));");

                writer.Indent--;
                writer.WriteLine("}");
                writer.WriteLine();
            }
    
            writer.Write("var url = typeof(url) === 'string' ? url : '");
            writer.Write(url);
            writer.WriteLine("';");
            writer.WriteLine(@"var nextId = 0;

    function Call(method, params, callback)
    {
        this.url = url;
        this.callback = callback;
        this.proxy = self;
        this.idempotent = idems[method];
        this.request = 
        { 
            id     : ++nextId, 
            method : m[method], 
            params : params 
        };
    }

    function rpc(call)
    {
        return self.channel != null && typeof(self.channel.rpc) === 'function' ?
            self.channel.rpc(call) : call;
    }

    this.kwargs = false;
    this.channel = new JayrockChannel();

    function JayrockChannel()
    {
        this.rpc = function(call)
        {
            var async = typeof(call.callback) === 'function';
            var xhr = newXHR();
            xhr.open('POST', call.url, async, this.httpUserName, this.httpPassword);
            xhr.setRequestHeader('Content-Type', this.contentType || 'application/json; charset=utf-8');
            xhr.setRequestHeader('X-JSON-RPC', call.request.method);
            if (async) xhr.onreadystatechange = function() { xhr_onreadystatechange(xhr, call.callback); }
            xhr.send(JSON.stringify(call.request));
            call.handler = xhr;
            if (async) return call;
            if (xhr.status != 200) throw new Error(xhr.status + ' ' + xhr.statusText);
            var response = JSON.parse(xhr.responseText);
            if (response.error != null) throw response.error;
            return response.result;
        }

        function xhr_onreadystatechange(sender, callback)
        {
            if (sender.readyState == /* complete */ 4)
            {
                try { 
                    sender.onreadystatechange = null; // Avoid IE7 leak (bug #12964)
                } 
                catch (e) { 
                    /* IE 6/Mobile throws for onreadystatechange = null */ 
                }

                var response = sender.status == 200 ? 
                    JSON.parse(sender.responseText) : {};
                
                callback(response, sender);
            }
        }

        function newXHR()
        {
            if (typeof(window) !== 'undefined' && window.XMLHttpRequest)
                return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */
            else
                return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */
        }
    }");
    
            writer.Indent--;
            writer.WriteLine("}");
    
            writer.WriteLine();
            writer.Write(service.Name);
            writer.Write(".rpcMethods = ");
            JsonConvert.Export(methodNames, writer);
            writer.WriteLine(";");
        }
예제 #40
0
 public void Dump(IndentedTextWriter w)
 {
     w.Write("LS1 ");
     Color.Dump(w);
     w.Write(" w: " + this.Width);
 }