コード例 #1
0
        public ServerModel(StringManager stringManager, Ide.Config config, IServiceProvider serviceProvider)
        {
            Contract.Requires(stringManager != null);
            Contract.Requires(config != null);
            Contract.Requires(serviceProvider != null);

            ServiceProvider = serviceProvider;

            var client = new NitraClient(stringManager);

            client.Send(new ClientMessage.CheckVersion(M.Constants.AssemblyVersionGuid));
            var responseMap = client.ResponseMap;

            responseMap[-1] = Response;
            _config         = config;
            Client          = client;

            var builder = ImmutableHashSet.CreateBuilder <string>(StringComparer.OrdinalIgnoreCase);

            foreach (var lang in config.Languages)
            {
                builder.UnionWith(lang.Extensions);
            }
            Extensions = builder.ToImmutable();
        }
コード例 #2
0
        public TestSuiteCreateOrEditViewModel(NitraClient client)
        {
            Languages         = new ReactiveList <LanguageInfo>();
            ParserLibs        = new ReactiveList <ParserLibViewModel>();
            ProjectSupports   = new ReactiveList <ProjectSupportViewModel>();
            References        = new ReactiveList <string>();
            DynamicExtensions = new ReactiveList <DynamicExtensionViewModel>();

            ParserLibs.Changed
            .Subscribe(_ => UpdateParserLibs(client));

            Languages.Changed.Subscribe(_ => RemoveDuplicates(Languages, li => ToFullSuitePath(li.Path)));

            ProjectSupports.Changed
            .Subscribe(_ => {
                if (!ProjectSupports.Any(ps => ps.IsSelected) && ProjectSupports.Count > 0)
                {
                    ProjectSupports[0].IsSelected = true;
                }
            });

            this.WhenAnyValue(vm => vm.SelectedLanguage)
            .Subscribe(UpdateSelectedLanguage);

            this.WhenAnyValue(vm => vm.RootFolder, vm => vm.SuiteName)
            .Where(t => t.Item1 != null && t.Item2 != null)
            .Select(t => Path.Combine(Path.GetFullPath(t.Item1), t.Item2))
            .Subscribe(path => SuitPath = path);
        }
コード例 #3
0
 public AstContext(NitraClient client, SolutionId solutionId, ProjectId projectId, FileId fileId, FileVersion fileVersion)
 {
     Client      = client;
     SolutionId  = solutionId;
     ProjectId   = projectId;
     FileId      = fileId;
     FileVersion = fileVersion;
 }
コード例 #4
0
ファイル: Server.cs プロジェクト: rsdn/nitra
    public Server(StringManager stringManager, Ide.Config config, IServiceProvider serviceProvider)
    {
      Contract.Requires(ServiceProvider != null);

      ServiceProvider = serviceProvider;

      var client = new NitraClient(stringManager);
      client.Send(new ClientMessage.CheckVersion(M.Constants.AssemblyVersionGuid));
      var responseMap = client.ResponseMap;
      responseMap[-1] = Response;
      _config = config;
      Client = client;
    }
コード例 #5
0
        private void UpdateParserLibs(NitraClient client)
        {
            try {
                RemoveDuplicates(ParserLibs, pl => ToFullSuitePath(pl.Path));

                var libsArray = ParserLibs.Select(vm => ToFullSuitePath(vm.Path)).ToImmutableArray();

                client.Send(new ClientMessage.GetLibsMetadata(libsArray));
                var libsMetadata = client.Receive <ServerMessage.LibsMetadata>().metadatas;

                client.Send(new ClientMessage.GetLibsSyntaxModules(libsArray));
                var libsSyntaxModules = client.Receive <ServerMessage.LibsSyntaxModules>().modules;

                client.Send(new ClientMessage.GetLibsProjectSupports(libsArray));
                var libsProjectSupports = client.Receive <ServerMessage.LibsProjectSupports>().libs;

                Languages.Clear();
                DynamicExtensions.Clear();
                ProjectSupports.Clear();

                for (int i = 0; i < libsMetadata.Length; i++)
                {
                    var languages       = libsMetadata[i].Languages;
                    var syntaxModules   = libsSyntaxModules[i].Modules;
                    var projectSupports = libsProjectSupports[i].ProjectSupports;

                    foreach (var language in languages)
                    {
                        Languages.Add(language);
                    }

                    if (!Languages.IsEmpty)
                    {
                        SelectedLanguage = Languages[0];
                    }

                    foreach (var syntaxModule in syntaxModules)
                    {
                        DynamicExtensions.Add(new DynamicExtensionViewModel(syntaxModule));
                    }

                    foreach (var projectSupport in projectSupports)
                    {
                        ProjectSupports.Add(new ProjectSupportViewModel(projectSupport.Caption, projectSupport.Path, projectSupport));
                    }
                }
            } catch (Exception e) {
                Debug.WriteLine("Failed to update parser lib metadata" + Environment.NewLine + e);
            }
        }
コード例 #6
0
        public NitraClientAsync()
        {
            _nitraClient = new NitraClient(new StringManager());

            var subject = new Subject <MessageWithId <ClientMessage> >();

            // Synchronize makes sure that all messages are processed one after another
            _syncedOutbox = Subject.Synchronize(subject);

            // Received messages are processed by SendReceive if there is someone waiting for a result
            // SendReceive is called on TaskPool
            _inbox = _syncedOutbox.ObserveOn(RxApp.TaskpoolScheduler)
                     .Select(SendReceive)
                     .Publish()
                     .RefCount();
        }
コード例 #7
0
ファイル: Server.cs プロジェクト: JetBrains/Nitra
    public Server(StringManager stringManager, Ide.Config config, IServiceProvider serviceProvider)
    {
      Contract.Requires(ServiceProvider != null);

      ServiceProvider = serviceProvider;

      var client = new NitraClient(stringManager);
      client.Send(new ClientMessage.CheckVersion(M.Constants.AssemblyVersionGuid));
      var responseMap = client.ResponseMap;
      responseMap[-1] = Response;
      _config = config;
      Client = client;

      var builder = ImmutableHashSet.CreateBuilder<string>(StringComparer.OrdinalIgnoreCase);
      foreach (var lang in config.Languages)
        builder.UnionWith(lang.Extensions);
      Extensions = builder.ToImmutable();
    }
コード例 #8
0
ファイル: AstNodeViewModel.cs プロジェクト: rsdn/nitra
 public AstContext(NitraClient client, SolutionId solutionId, ProjectId projectId, FileId fileId, FileVersion fileVersion)
 {
   Client      = client;
   SolutionId  = solutionId;
   ProjectId   = projectId;
   FileId      = fileId;
   FileVersion = fileVersion;
 }