Exemplo n.º 1
0
        private void OnProjectCompiled(int contextId, CompileResponse response)
        {
            _compileResponses.AddOrUpdate(contextId,
                                          _ =>
            {
                var tcs = new TaskCompletionSource <CompileResponse>();
                tcs.SetResult(response);
                return(tcs);
            },
                                          (_, existing) =>
            {
                if (!existing.TrySetResult(response))
                {
                    var tcs = new TaskCompletionSource <CompileResponse>();
                    tcs.SetResult(response);
                    return(tcs);
                }

                return(existing);
            });
        }
Exemplo n.º 2
0
        private void OnProjectCompiled(int contextId, CompileResponse response)
        {
            _compileResponses.AddOrUpdate(contextId,
                _ =>
                {
                    var tcs = new TaskCompletionSource<CompileResponse>();
                    tcs.SetResult(response);
                    return tcs;
                },
                (_, existing) =>
                {
                    if (!existing.TrySetResult(response))
                    {
                        var tcs = new TaskCompletionSource<CompileResponse>();
                        tcs.SetResult(response);
                        return tcs;
                    }

                    return existing;
                });
        }
Exemplo n.º 3
0
 public DesignTimeProjectReference(CompilationProjectContext project, CompileResponse response)
 {
     _project = project;
     _response = response;
 }
Exemplo n.º 4
0
        private void ReceiveMessages()
        {
            try
            {
                while (true)
                {
                    var metadata = _reader.ReadString();
                    var obj = JsonDeserializer.Deserialize(new StringReader(metadata)) as JsonObject;

                    var messageType = obj.ValueAsString("MessageType");
                    switch (messageType)
                    {
                        case "Assembly":
                            //{
                            //    "MessageType": "Assembly",
                            //    "ContextId": 1,
                            //    "AssemblyPath": null,
                            //    "Diagnostics": [],
                            //    "Blobs": 2
                            //}
                            // Embedded Refs (special)
                            // Blob 1
                            // Blob 2
                            var compileResponse = new CompileResponse();
                            compileResponse.AssemblyPath = obj.ValueAsString(nameof(CompileResponse.AssemblyPath));
                            compileResponse.Diagnostics = ValueAsCompilationMessages(obj, (nameof(CompileResponse.Diagnostics)));
                            int contextId = obj.ValueAsInt("ContextId");
                            int blobs = obj.ValueAsInt("Blobs");

                            var embeddedReferencesCount = _reader.ReadInt32();
                            compileResponse.EmbeddedReferences = new Dictionary<string, byte[]>();
                            for (int i = 0; i < embeddedReferencesCount; i++)
                            {
                                var key = _reader.ReadString();
                                int valueLength = _reader.ReadInt32();
                                var value = _reader.ReadBytes(valueLength);
                                compileResponse.EmbeddedReferences[key] = value;
                            }

                            var assemblyBytesLength = _reader.ReadInt32();
                            compileResponse.AssemblyBytes = _reader.ReadBytes(assemblyBytesLength);
                            var pdbBytesLength = _reader.ReadInt32();
                            compileResponse.PdbBytes = _reader.ReadBytes(pdbBytesLength);

                            // Skip over blobs that aren't understood
                            for (int i = 0; i < blobs - 2; i++)
                            {
                                int length = _reader.ReadInt32();
                                _reader.ReadBytes(length);
                            }

                            ProjectCompiled(contextId, compileResponse);

                            break;
                        case "Sources":
                            //{
                            //    "MessageType": "Sources",
                            //    "Files": [],
                            //}
                            var files = obj.ValueAsStringArray("Files");
                            ProjectSources(files);
                            break;
                        case "ProjectContexts":
                            //{
                            //    "MessageType": "ProjectContexts",
                            //    "Projects": { "path": id },
                            //}
                            var projects = obj.ValueAsJsonObject("Projects");
                            var projectContexts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
                            foreach (var key in projects.Keys)
                            {
                                projectContexts[key] = projects.ValueAsInt(key);
                            }

                            ProjectsInitialized(projectContexts);
                            break;
                        case "ProjectChanged":
                            {
                                //{
                                //    "MessageType": "ProjectChanged",
                                //    "ContextId": id,
                                //}
                                int id = obj.ValueAsInt("ContextId");
                                ProjectChanged(id);
                            }
                            break;
                        case "Error":
                            //{
                            //    "MessageType": "Error",
                            //    "ContextId": id,
                            //    "Payload": {
                            //        "Message": "",
                            //        "Path": "",
                            //        "Line": 0,
                            //        "Column": 1
                            //    }
                            //}
                            {
                                var id = obj.ValueAsInt("ContextId");
                                var message = obj.ValueAsJsonObject("Payload").
                                                  ValueAsString("Message");

                                Error(id, message);
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.TraceError("[{0}]: Exception occurred: {1}", GetType().Name, ex);
                Closed();
                return;
            }
        }
Exemplo n.º 5
0
 public DesignTimeProjectReference(CompilationProjectContext project, CompileResponse response)
 {
     _project  = project;
     _response = response;
 }
Exemplo n.º 6
0
        private void ReceiveMessages()
        {
            try
            {
                while (true)
                {
                    var metadata = _reader.ReadString();
                    var obj      = JsonDeserializer.Deserialize(new StringReader(metadata)) as JsonObject;

                    var messageType = obj.ValueAsString("MessageType");
                    switch (messageType)
                    {
                    case "Assembly":
                        //{
                        //    "MessageType": "Assembly",
                        //    "ContextId": 1,
                        //    "AssemblyPath": null,
                        //    "Diagnostics": [],
                        //    "Blobs": 2
                        //}
                        // Embedded Refs (special)
                        // Blob 1
                        // Blob 2
                        var compileResponse = new CompileResponse();
                        compileResponse.AssemblyPath = obj.ValueAsString(nameof(CompileResponse.AssemblyPath));
                        compileResponse.Diagnostics  = ValueAsCompilationMessages(obj, (nameof(CompileResponse.Diagnostics)));
                        int contextId = obj.ValueAsInt("ContextId");
                        int blobs     = obj.ValueAsInt("Blobs");

                        var embeddedReferencesCount = _reader.ReadInt32();
                        compileResponse.EmbeddedReferences = new Dictionary <string, byte[]>();
                        for (int i = 0; i < embeddedReferencesCount; i++)
                        {
                            var key         = _reader.ReadString();
                            int valueLength = _reader.ReadInt32();
                            var value       = _reader.ReadBytes(valueLength);
                            compileResponse.EmbeddedReferences[key] = value;
                        }

                        var assemblyBytesLength = _reader.ReadInt32();
                        compileResponse.AssemblyBytes = _reader.ReadBytes(assemblyBytesLength);
                        var pdbBytesLength = _reader.ReadInt32();
                        compileResponse.PdbBytes = _reader.ReadBytes(pdbBytesLength);

                        // Skip over blobs that aren't understood
                        for (int i = 0; i < blobs - 2; i++)
                        {
                            int length = _reader.ReadInt32();
                            _reader.ReadBytes(length);
                        }

                        ProjectCompiled(contextId, compileResponse);

                        break;

                    case "Sources":
                        //{
                        //    "MessageType": "Sources",
                        //    "Files": [],
                        //}
                        var files = obj.ValueAsStringArray("Files");
                        ProjectSources(files);
                        break;

                    case "ProjectContexts":
                        //{
                        //    "MessageType": "ProjectContexts",
                        //    "Projects": { "path": id },
                        //}
                        var projects        = obj.ValueAsJsonObject("Projects");
                        var projectContexts = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase);
                        foreach (var key in projects.Keys)
                        {
                            projectContexts[key] = projects.ValueAsInt(key);
                        }

                        ProjectsInitialized(projectContexts);
                        break;

                    case "ProjectChanged":
                    {
                        //{
                        //    "MessageType": "ProjectChanged",
                        //    "ContextId": id,
                        //}
                        int id = obj.ValueAsInt("ContextId");
                        ProjectChanged(id);
                    }
                    break;

                    case "Error":
                        //{
                        //    "MessageType": "Error",
                        //    "ContextId": id,
                        //    "Payload": {
                        //        "Message": "",
                        //        "Path": "",
                        //        "Line": 0,
                        //        "Column": 1
                        //    }
                        //}
                    {
                        var id      = obj.ValueAsInt("ContextId");
                        var message = obj.ValueAsJsonObject("Payload").
                                      ValueAsString("Message");

                        Error(id, message);
                    }
                    break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.TraceError("[{0}]: Exception occurred: {1}", GetType().Name, ex);
                Closed();
                return;
            }
        }