Beispiel #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="modelSystem">The model system to execute</param>
 /// <param name="cwd">The directory to run in.</param>
 /// <param name="startToExecute">The starting point for the model system run</param>
 /// <param name="id">The ID given to this model run.</param>
 /// <param name="error">An error message if there is an issue creating the model system.</param>
 /// <returns>True if the model system was sent</returns>
 public bool RunModelSystem(ModelSystemSession modelSystem, string cwd, string startToExecute, out string?id, out CommandError?error)
 {
     id = null;
     lock (_outLock)
     {
         try
         {
             using var memStream = new MemoryStream();
             using var write     = new BinaryWriter(memStream, Encoding.UTF8, true);
             if (!modelSystem.Save(out error, memStream))
             {
                 return(false);
             }
             id = Guid.NewGuid().ToString();
             // int64
             using var writer = new BinaryWriter(_HostStream, Encoding.UTF8, true);
             writer.Write((int)Out.RunModelSystem);
             writer.Write(id);
             writer.Write(cwd);
             writer.Write(startToExecute);
             writer.Write(memStream.Length);
             memStream.WriteTo(_HostStream);
             return(true);
         }
         catch (IOException e)
         {
             error = new CommandError(e.Message);
             return(false);
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// Invoked when a view into the model system session is disposed.
 /// </summary>
 /// <param name="mss">The model system session to be decremented</param>
 /// <param name="references"></param>
 internal void ModelSystemSessionDecrementing(ModelSystemSession mss, ref int references)
 {
     lock (_sessionLock)
     {
         if (Interlocked.Decrement(ref references) <= 0)
         {
             lock (_sessionLock)
             {
                 _activeSessions.Remove(mss.ModelSystemHeader);
             }
             // remove one reference to the project session
             Dispose();
         }
     }
 }
Beispiel #3
0
        internal static bool Load(ProjectSession session, ModelSystemHeader modelSystemHeader, out ModelSystemSession?msSession, out CommandError?error)
        {
            // the parameters are have already been vetted
            var    path        = modelSystemHeader.ModelSystemPath;
            var    info        = new FileInfo(path);
            string?errorString = null;

            error = null;

            try
            {
                ModelSystem?ms;
                if (info.Exists)
                {
                    using var rawStream = File.OpenRead(modelSystemHeader.ModelSystemPath);
                    ms = Load(rawStream, session.GetModuleRepository(), modelSystemHeader, ref errorString);
                }
                else
                {
                    ms = new ModelSystem(modelSystemHeader);
                }
                if (ms == null)
                {
                    msSession = null;
                    // Give a generic error message if one was not already supplied.
                    error = new CommandError(errorString ?? "Unable to create a model system session for the given header.");
                    return(false);
                }
                msSession = new ModelSystemSession(session, ms);
                error     = null;
                return(true);
            }
            catch (IOException e)
            {
                error     = new CommandError(e.Message);
                msSession = null;
                return(false);
            }
        }