private static void CreateProtocolAndAdvise(Lifetime lifetime, List <ProtocolInstance> list, string solutionName)
        {
            try
            {
                var dispatcher = MainThreadDispatcher.Instance;
                var riderProtocolController = new RiderProtocolController(dispatcher, lifetime);
                list.Add(new ProtocolInstance(riderProtocolController.Wire.Port, solutionName));

#if !NET35
                var serializers = new Serializers(lifetime, null, null);
#else
                var serializers = new Serializers();
#endif
                var identities = new Identities(IdKind.Server);

                MainThreadDispatcher.AssertThread();
                var protocol = new Protocol("UnityEditorPlugin" + solutionName, serializers, identities, MainThreadDispatcher.Instance, riderProtocolController.Wire, lifetime);
                riderProtocolController.Wire.Connected.WhenTrue(lifetime, connectionLifetime =>
                {
                    ourLogger.Log(LoggingLevel.VERBOSE, "Create UnityModel and advise for new sessions...");
                    var model = new EditorPluginModel(connectionLifetime, protocol);
                    AdviseUnityActions(model, connectionLifetime);
                    AdviseEditorState(model);
                    OnModelInitialization(new UnityModelAndLifetime(model, connectionLifetime));
                    AdviseRefresh(model);
                    InitEditorLogPath(model);

                    model.UnityProcessId.SetValue(Process.GetCurrentProcess().Id);
                    model.UnityApplicationData.SetValue(new UnityApplicationData(
                                                            EditorApplication.applicationPath,
                                                            EditorApplication.applicationContentsPath, UnityUtils.UnityApplicationVersion));
                    model.ScriptingRuntime.SetValue(UnityUtils.ScriptingRuntime);

                    if (UnityUtils.UnityVersion >= new Version(2018, 2))
                    {
                        model.ScriptCompilationDuringPlay.Set(EditorPrefsWrapper.ScriptChangesDuringPlayOptions);
                    }
                    else
                    {
                        model.ScriptCompilationDuringPlay.Set((int)PluginSettings.AssemblyReloadSettings);
                    }

                    AdviseShowPreferences(model, connectionLifetime, ourLogger);
                    AdviseGenerateUISchema(model);
                    AdviseExitUnity(model);
                    GetBuildLocation(model);
                    AdviseRunMethod(model);
                    GetInitTime(model);

                    ourLogger.Verbose("UnityModel initialized.");
                    var pair = new ModelWithLifetime(model, connectionLifetime);
                    connectionLifetime.OnTermination(() => { UnityModels.Remove(pair); });
                    UnityModels.Add(pair);
                });
            }
            catch (Exception ex)
            {
                ourLogger.Error("Init Rider Plugin " + ex);
            }
        }
        private static void CreateProtocolAndAdvise(Lifetime lifetime, List <ProtocolInstance> list, string solutionFileName)
        {
            try
            {
                var dispatcher = MainThreadDispatcher.Instance;
                var riderProtocolController = new RiderProtocolController(dispatcher, lifetime);
                list.Add(new ProtocolInstance(riderProtocolController.Wire.Port, solutionFileName));

                var serializers = new Serializers();
                var identities  = new Identities(IdKind.Server);

                MainThreadDispatcher.AssertThread();

                riderProtocolController.Wire.Connected.WhenTrue(lifetime, connectionLifetime =>
                {
                    var protocol = new Protocol("UnityEditorPlugin", serializers, identities, MainThreadDispatcher.Instance, riderProtocolController.Wire);
                    ourLogger.Log(LoggingLevel.VERBOSE, "Create UnityModel and advise for new sessions...");
                    var model = new EditorPluginModel(connectionLifetime, protocol);
                    AdviseUnityActions(model, connectionLifetime);
                    AdviseEditorState(model);
                    OnModelInitialization(new UnityModelAndLifetime(model, connectionLifetime));
                    AdviseRefresh(model);
                    InitEditorLogPath(model);
                    AdviseScriptCompilationDuringPlay(model, connectionLifetime);

                    model.UnityProcessId.Set(Process.GetCurrentProcess().Id);
                    model.FullPluginPath.AdviseNotNull(connectionLifetime, AdditionalPluginsInstaller.UpdateSelf);
                    model.ApplicationPath.SetValue(EditorApplication.applicationPath);
                    model.ApplicationContentsPath.SetValue(EditorApplication.applicationContentsPath);
                    model.ApplicationVersion.SetValue(Application.unityVersion);
                    model.ScriptingRuntime.SetValue(UnityUtils.ScriptingRuntime);

                    if (UnityUtils.UnityVersion >= new Version(2018, 2) && EditorPrefsWrapper.ScriptChangesDuringPlayOptions == 0)
                    {
                        model.NotifyIsRecompileAndContinuePlaying.Fire("General");
                    }
                    else if (UnityUtils.UnityVersion < new Version(2018, 2) && PluginSettings.AssemblyReloadSettings == AssemblyReloadSettings.RecompileAndContinuePlaying)
                    {
                        model.NotifyIsRecompileAndContinuePlaying.Fire("Rider");
                    }

                    ourLogger.Verbose("UnityModel initialized.");
                    var pair = new ModelWithLifetime(model, connectionLifetime);
                    connectionLifetime.AddAction(() => { UnityModels.Remove(pair); });
                    UnityModels.Add(pair);
                    new UnityEventLogSender(ourLogEventCollector);
                });
            }
            catch (Exception ex)
            {
                ourLogger.Error("Init Rider Plugin " + ex);
            }
        }
Beispiel #3
0
        private static void CreateProtocolAndAdvise(Lifetime lifetime, List <ProtocolInstance> list, string solutionFileName)
        {
            try
            {
                var riderProtocolController = new RiderProtocolController(MainThreadDispatcher.Instance, lifetime);
                list.Add(new ProtocolInstance(riderProtocolController.Wire.Port, solutionFileName));

                var serializers = new Serializers();
                var identities  = new Identities(IdKind.Server);

                MainThreadDispatcher.AssertThread();

                riderProtocolController.Wire.Connected.WhenTrue(lifetime, connectionLifetime =>
                {
                    var protocol = new Protocol("UnityEditorPlugin", serializers, identities, MainThreadDispatcher.Instance, riderProtocolController.Wire);
                    ourLogger.Log(LoggingLevel.VERBOSE, "Create UnityModel and advise for new sessions...");
                    var model = new EditorPluginModel(connectionLifetime, protocol);
                    AdviseUnityActions(model, connectionLifetime);
                    AdviseEditorState(model);
                    OnModelInitialization(new UnityModelAndLifetime(model, connectionLifetime));
                    AdviseRefresh(model);
                    InitEditorLogPath(model);

                    model.FullPluginPath.AdviseNotNull(connectionLifetime, AdditionalPluginsInstaller.UpdateSelf);
                    model.ApplicationPath.SetValue(EditorApplication.applicationPath);
                    model.ApplicationContentsPath.SetValue(EditorApplication.applicationContentsPath);
                    model.ApplicationVersion.SetValue(Application.unityVersion);
                    model.ScriptingRuntime.SetValue(UnityUtils.ScriptingRuntime);

                    ourLogger.Verbose("UnityModel initialized.");
                    var pair = new ModelWithLifetime(model, connectionLifetime);
                    connectionLifetime.AddAction(() => { UnityModels.Remove(pair); });
                    UnityModels.Add(pair);
                    new UnityEventLogSender(ourLogEventCollector);
                });
            }
            catch (Exception ex)
            {
                ourLogger.Error("Init Rider Plugin " + ex);
            }
        }
Beispiel #4
0
        private static int CreateProtocolForSolution(Lifetime lifetime, string solutionName, Action onDisconnected)
        {
            try
            {
                var dispatcher = MainThreadDispatcher.Instance;
                var currentWireAndProtocolLifetimeDef = lifetime.CreateNested();
                var currentWireAndProtocolLifetime    = currentWireAndProtocolLifetimeDef.Lifetime;


                var riderProtocolController = new RiderProtocolController(dispatcher, currentWireAndProtocolLifetime);

#if !NET35
                var serializers = new Serializers(lifetime, null, null);
#else
                var serializers = new Serializers();
#endif
                var identities = new Identities(IdKind.Server);

                MainThreadDispatcher.AssertThread();
                var protocol = new Protocol("UnityEditorPlugin" + solutionName, serializers, identities, MainThreadDispatcher.Instance, riderProtocolController.Wire, currentWireAndProtocolLifetime);
                riderProtocolController.Wire.Connected.WhenTrue(currentWireAndProtocolLifetime, connectionLifetime =>
                {
                    ourLogger.Log(LoggingLevel.VERBOSE, "Create UnityModel and advise for new sessions...");
                    var model = new BackendUnityModel(connectionLifetime, protocol);
                    AdviseUnityActions(model, connectionLifetime);
                    AdviseEditorState(model);
                    OnModelInitialization(new UnityModelAndLifetime(model, connectionLifetime));
                    AdviseRefresh(model);
                    var paths = GetLogPaths();

                    model.UnityApplicationData.SetValue(new UnityApplicationData(
                                                            EditorApplication.applicationPath,
                                                            EditorApplication.applicationContentsPath,
                                                            UnityUtils.UnityApplicationVersion,
                                                            paths[0], paths[1],
                                                            Process.GetCurrentProcess().Id));

                    model.UnityApplicationSettings.ScriptCompilationDuringPlay.Set(UnityUtils.SafeScriptCompilationDuringPlay);

                    model.UnityProjectSettings.ScriptingRuntime.SetValue(UnityUtils.ScriptingRuntime);

                    AdviseShowPreferences(model, connectionLifetime, ourLogger);
                    AdviseGenerateUISchema(model);
                    AdviseExitUnity(model);
                    GetBuildLocation(model);
                    AdviseRunMethod(model);
                    GetInitTime(model);

                    ourLogger.Verbose("UnityModel initialized.");
                    var pair = new ModelWithLifetime(model, connectionLifetime);
                    connectionLifetime.OnTermination(() => { UnityModels.Remove(pair); });
                    UnityModels.Add(pair);

                    connectionLifetime.OnTermination(() =>
                    {
                        ourLogger.Verbose($"Connection lifetime is not alive for {solutionName}, destroying protocol");
                        onDisconnected();
                    });
                });

                return(riderProtocolController.Wire.Port);
            }
            catch (Exception ex)
            {
                ourLogger.Error("Init Rider Plugin " + ex);
                return(-1);
            }
        }