/// <summary> /// Translates the packet to/from binary form. /// </summary> /// <param name="translator">The translator to use.</param> public void Translate(INodePacketTranslator translator) { translator.Translate(ref _nodeId); translator.Translate(ref _buildParameters, BuildParameters.FactoryForDeserialization); translator.TranslateArray(ref _forwardingLoggers, LoggerDescription.FactoryForTranslation); translator.TranslateDotNet(ref _appDomainSetup); }
/// <summary> /// Serialize / deserialize this item. /// </summary> public void Translate(INodePacketTranslator translator) { translator.TranslateEnum <TaskParameterType>(ref _parameterType, (int)_parameterType); switch (_parameterType) { case TaskParameterType.Null: _wrappedParameter = null; break; case TaskParameterType.String: string stringParam = (string)_wrappedParameter; translator.Translate(ref stringParam); _wrappedParameter = stringParam; break; case TaskParameterType.StringArray: string[] stringArrayParam = (string[])_wrappedParameter; translator.Translate(ref stringArrayParam); _wrappedParameter = stringArrayParam; break; case TaskParameterType.ValueType: case TaskParameterType.ValueTypeArray: translator.TranslateDotNet(ref _wrappedParameter); break; case TaskParameterType.ITaskItem: TranslateITaskItem(translator); break; case TaskParameterType.ITaskItemArray: TranslateITaskItemArray(translator); break; case TaskParameterType.Invalid: Exception exceptionParam = (Exception)_wrappedParameter; translator.TranslateDotNet(ref exceptionParam); _wrappedParameter = exceptionParam; break; default: ErrorUtilities.ThrowInternalErrorUnreachable(); break; } }
/// <summary> /// Translates the packet to/from binary form. /// </summary> /// <param name="translator">The translator to use.</param> public void Translate(INodePacketTranslator translator) { translator.Translate(ref _nodeId); translator.Translate(ref _buildParameters, BuildParameters.FactoryForDeserialization); translator.TranslateArray(ref _forwardingLoggers, LoggerDescription.FactoryForTranslation); #if FEATURE_BINARY_SERIALIZATION && FEATURE_APPDOMAIN translator.TranslateDotNet(ref _appDomainSetup); #endif }
/// <summary> /// Translates the packet to/from binary form. /// </summary> /// <param name="translator">The translator to use.</param> public void Translate(INodePacketTranslator translator) { translator.TranslateEnum(ref _taskResult, (int)_taskResult); translator.TranslateDotNet(ref _taskException); translator.Translate(ref _taskExceptionMessage); translator.Translate(ref _taskExceptionMessageArgs); translator.TranslateDictionary(ref _taskOutputParameters, StringComparer.OrdinalIgnoreCase, TaskParameter.FactoryForDeserialization); translator.TranslateDictionary(ref _buildProcessEnvironment, StringComparer.OrdinalIgnoreCase); }
/// <summary> /// Writes the logging packet to the translator. /// </summary> internal void WriteToStream(INodePacketTranslator translator) { #if FEATURE_BINARY_SERIALIZATION if (_eventType != LoggingEventType.CustomEvent) { MethodInfo methodInfo = null; lock (s_writeMethodCache) { if (!s_writeMethodCache.TryGetValue(_eventType, out methodInfo)) { Type eventDerivedType = _buildEvent.GetType(); methodInfo = eventDerivedType.GetMethod("WriteToStream", BindingFlags.NonPublic | BindingFlags.Instance); s_writeMethodCache.Add(_eventType, methodInfo); } } int packetVersion = s_defaultPacketVersion; // Make sure the other side knows what sort of serialization is coming translator.Translate(ref packetVersion); bool eventCanSerializeItself = methodInfo != null; translator.Translate(ref eventCanSerializeItself); if (eventCanSerializeItself) { // 3.5 or later -- we have custom serialization methods, so let's use them. ArgsWriterDelegate writerMethod = (ArgsWriterDelegate)CreateDelegateRobust(typeof(ArgsWriterDelegate), _buildEvent, methodInfo); writerMethod(translator.Writer); if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) { _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); } } else { WriteEventToStream(_buildEvent, _eventType, translator); } } else { #if FEATURE_ASSEMBLY_LOCATION string assemblyLocation = _buildEvent.GetType().GetTypeInfo().Assembly.Location; translator.Translate(ref assemblyLocation); #else string assemblyName = _buildEvent.GetType().GetTypeInfo().Assembly.FullName; translator.Translate(ref assemblyName); #endif translator.TranslateDotNet(ref _buildEvent); } #else translator.TranslateBuildEventArgs(ref _buildEvent); #endif }
/// <summary> /// Translates the packet to/from binary form. /// </summary> /// <param name="translator">The translator to use.</param> public void Translate(INodePacketTranslator translator) { translator.Translate(ref _nodeId); translator.Translate(ref _startupDirectory); translator.TranslateDictionary(ref _buildProcessEnvironment, StringComparer.OrdinalIgnoreCase); translator.TranslateCulture(ref _culture); translator.TranslateCulture(ref _uiCulture); translator.TranslateDotNet(ref _appDomainSetup); translator.Translate(ref _lineNumberOfTask); translator.Translate(ref _columnNumberOfTask); translator.Translate(ref _projectFileOfTask); translator.Translate(ref _taskName); translator.Translate(ref _taskLocation); translator.TranslateDictionary(ref _taskParameters, StringComparer.OrdinalIgnoreCase, TaskParameter.FactoryForDeserialization); translator.Translate(ref _continueOnError); }
/// <summary> /// Reads or writes the packet to the serializer. /// </summary> void INodePacketTranslatable.Translate(INodePacketTranslator translator) { translator.Translate(ref _submissionId); translator.Translate(ref _configurationId); translator.Translate(ref _globalRequestId); translator.Translate(ref _parentGlobalRequestId); translator.Translate(ref _nodeRequestId); translator.Translate(ref _initialTargets); translator.Translate(ref _defaultTargets); translator.Translate(ref _circularDependency); translator.TranslateDotNet(ref _requestException); translator.TranslateDictionary <ConcurrentDictionary <string, TargetResult>, TargetResult>(ref _resultsByTarget, TargetResult.FactoryForDeserialization, CreateTargetResultDictionary); translator.Translate(ref _baseOverallResult); translator.Translate(ref _projectStateAfterBuild, ProjectInstance.FactoryForDeserialization); translator.Translate(ref _savedCurrentDirectory); translator.TranslateDictionary(ref _savedEnvironmentVariables, StringComparer.OrdinalIgnoreCase); }
/// <summary> /// Serializes or deserializes a packet. /// </summary> public void Translate(INodePacketTranslator translator) { translator.TranslateEnum(ref _reason, (int)_reason); translator.TranslateDotNet(ref _exception); }
/// <summary> /// Reads the logging packet from the translator. /// </summary> internal void ReadFromStream(INodePacketTranslator translator) { if (LoggingEventType.CustomEvent != _eventType) { _buildEvent = GetBuildEventArgFromId(); // The other side is telling us whether the event knows how to log itself, or whether we're going to have // to do it manually int packetVersion = s_defaultPacketVersion; translator.Translate(ref packetVersion); bool eventCanSerializeItself = true; translator.Translate(ref eventCanSerializeItself); if (eventCanSerializeItself) { MethodInfo methodInfo = null; lock (s_readMethodCache) { if (!s_readMethodCache.TryGetValue(_eventType, out methodInfo)) { Type eventDerivedType = _buildEvent.GetType(); methodInfo = eventDerivedType.GetMethod("CreateFromStream", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod); s_readMethodCache.Add(_eventType, methodInfo); } } ArgsReaderDelegate readerMethod = (ArgsReaderDelegate)CreateDelegateRobust(typeof(ArgsReaderDelegate), _buildEvent, methodInfo); readerMethod(translator.Reader, packetVersion); if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) { _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); } } else { _buildEvent = ReadEventFromStream(_eventType, translator); } } else { string fileLocation = null; translator.Translate(ref fileLocation); bool resolveAssembly = false; lock (s_lockObject) { if (!s_customEventsLoaded.Contains(fileLocation)) { resolveAssembly = true; } // If we are to resolve the assembly add it to the list of assemblies resolved if (resolveAssembly) { s_customEventsLoaded.Add(fileLocation); } } if (resolveAssembly) { s_resolver = new TaskEngineAssemblyResolver(); s_resolver.InstallHandler(); s_resolver.Initialize(fileLocation); } try { translator.TranslateDotNet(ref _buildEvent); } finally { if (resolveAssembly) { s_resolver.RemoveHandler(); s_resolver = null; } } } _eventType = GetLoggingEventId(_buildEvent); }
/// <summary> /// Translator. /// </summary> public void Translate(INodePacketTranslator translator) { translator.TranslateEnum(ref _resultCode, (int)_resultCode); translator.TranslateEnum(ref _actionCode, (int)_actionCode); translator.TranslateDotNet(ref _exception); }
/// <summary> /// Writes the logging packet to the translator. /// </summary> internal void WriteToStream(INodePacketTranslator translator) { if (_eventType != LoggingEventType.CustomEvent) { MethodInfo methodInfo = null; lock (s_writeMethodCache) { if (!s_writeMethodCache.TryGetValue(_eventType, out methodInfo)) { Type eventDerivedType = _buildEvent.GetType(); methodInfo = eventDerivedType.GetMethod("WriteToStream", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod); s_writeMethodCache.Add(_eventType, methodInfo); } } int packetVersion = s_defaultPacketVersion; // Make sure the other side knows what sort of serialization is coming translator.Translate(ref packetVersion); bool eventCanSerializeItself = methodInfo != null; translator.Translate(ref eventCanSerializeItself); if (eventCanSerializeItself) { // 3.5 or later -- we have custom serialization methods, so let's use them. ArgsWriterDelegate writerMethod = (ArgsWriterDelegate)CreateDelegateRobust(typeof(ArgsWriterDelegate), _buildEvent, methodInfo); writerMethod(translator.Writer); if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) { _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); } } else { WriteEventToStream(_buildEvent, _eventType, translator); } } else { string assemblyLocation = _buildEvent.GetType().Assembly.Location; translator.Translate(ref assemblyLocation); translator.TranslateDotNet(ref _buildEvent); } }
/// <summary> /// Reads or writes the packet to the serializer. /// </summary> void INodePacketTranslatable.Translate(INodePacketTranslator translator) { translator.Translate(ref _submissionId); translator.Translate(ref _configurationId); translator.Translate(ref _globalRequestId); translator.Translate(ref _parentGlobalRequestId); translator.Translate(ref _nodeRequestId); translator.Translate(ref _initialTargets); translator.Translate(ref _defaultTargets); translator.Translate(ref _circularDependency); translator.TranslateDotNet(ref _requestException); translator.TranslateDictionary<ConcurrentDictionary<string, TargetResult>, TargetResult>(ref _resultsByTarget, TargetResult.FactoryForDeserialization, CreateTargetResultDictionary); translator.Translate(ref _baseOverallResult); translator.Translate(ref _projectStateAfterBuild, ProjectInstance.FactoryForDeserialization); translator.Translate(ref _savedCurrentDirectory); translator.TranslateDictionary(ref _savedEnvironmentVariables, StringComparer.OrdinalIgnoreCase); }