コード例 #1
0
ファイル: DataBaseCollection.cs プロジェクト: teize001/Crema
        public DataBaseCollection(CremaHost cremaHost, string address, string dataBase, ServiceInfo serviceInfo)
        {
            this.cremaHost   = cremaHost;
            this.userContext = cremaHost.UserContext;

            this.serviceDispatcher = new CremaDispatcher(this);
            var metaData = this.serviceDispatcher.Invoke(() =>
            {
                this.service = DataBaseCollectionServiceFactory.CreateServiceClient(address, serviceInfo, this);
                this.service.Open();
                if (this.service is ICommunicationObject service)
                {
                    service.Faulted += Service_Faulted;
                }

                ResultBase <DataBaseCollectionMetaData> result;
                result = dataBase == null
                    ? this.service.Subscribe(cremaHost.AuthenticationToken)
                    : this.service.SubscribeDataBase(cremaHost.AuthenticationToken, dataBase);
                result.Validate();

#if !DEBUG
                this.timer          = new Timer(30000);
                this.timer.Elapsed += Timer_Elapsed;
                this.timer.Start();
#endif
                return(result.Value);
            });

            this.Initialize(metaData);
            this.CremaHost.AddService(this);
        }
コード例 #2
0
ファイル: DataBaseCollection.cs プロジェクト: teize001/Crema
 void IDataBaseCollectionServiceCallback.OnServiceClosed(SignatureDate signatureDate, CloseInfo closeInfo)
 {
     this.service.Abort();
     this.service = null;
     this.timer?.Dispose();
     this.timer = null;
     this.serviceDispatcher.Dispose();
     this.serviceDispatcher = null;
     this.InvokeAsync(() =>
     {
         this.CremaHost.RemoveService(this);
     }, nameof(IDataBaseCollectionServiceCallback.OnServiceClosed));
 }
コード例 #3
0
ファイル: DataBaseCollection.cs プロジェクト: teize001/Crema
 private void Service_Faulted(object sender, EventArgs e)
 {
     this.serviceDispatcher.Invoke(() =>
     {
         try
         {
             this.service.Abort();
             this.service = null;
         }
         catch
         {
         }
         this.timer?.Dispose();
         this.timer = null;
         this.serviceDispatcher.Dispose();
         this.serviceDispatcher = null;
     });
     this.InvokeAsync(() =>
     {
         this.CremaHost.RemoveService(this);
     }, nameof(Service_Faulted));
 }
コード例 #4
0
ファイル: DataBaseCollection.cs プロジェクト: teize001/Crema
 public void Close(CloseInfo closeInfo)
 {
     this.serviceDispatcher?.Invoke(() =>
     {
         this.timer?.Dispose();
         this.timer = null;
         if (this.service != null)
         {
             try
             {
                 if (closeInfo.Reason != CloseReason.NoResponding)
                 {
                     this.service.Unsubscribe();
                     if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                     {
                         this.service.Close();
                     }
                     else
                     {
                         this.service.Abort();
                     }
                 }
                 else
                 {
                     this.service.Abort();
                 }
             }
             catch
             {
                 this.service.Abort();
             }
             this.service = null;
         }
         this.serviceDispatcher.Dispose();
         this.serviceDispatcher = null;
     });
 }