123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using Dicom;
- using Dicom.Network;
- using System;
- using System.Text;
- using System.Threading.Tasks;
- using Vinno.FIS.Sonopost.Features.Config;
- namespace Vinno.FIS.Sonopost.Features.Dicom
- {
- public class VinnoDicomService : DicomService, IDicomServiceProvider, IDicomCStoreProvider, IDicomCEchoProvider
- {
- public VinnoDicomService(INetworkStream stream, Encoding fallbackEncoding, global::Dicom.Log.Logger log) : base(stream, fallbackEncoding, log)
- {
- }
- public Task OnReceiveAssociationRequestAsync(DicomAssociation association)
- {
- var title = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile;
- if (association.CalledAE != title)
- {
- IUS.Common.Log.Logger.WriteLineError($"AETITLE not match");
- return SendAssociationRejectAsync(
- DicomRejectResult.Permanent,
- DicomRejectSource.ServiceUser,
- DicomRejectReason.CalledAENotRecognized);
- }
- foreach (var pc in association.PresentationContexts)
- {
- if (pc.AbstractSyntax == DicomUID.Verification)
- pc.AcceptTransferSyntaxes(AcceptedTypes.AcceptedTransferSyntaxes);
- else if (pc.AbstractSyntax.StorageCategory != DicomStorageCategory.None)
- pc.AcceptTransferSyntaxes(AcceptedTypes.AcceptedImageTransferSyntaxes);
- }
- IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAssociationRequestAsync");
- return SendAssociationAcceptAsync(association);
- }
- public Task OnReceiveAssociationReleaseRequestAsync()
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAssociationReleaseRequestAsync");
- return SendAssociationReleaseResponseAsync();
- }
- public void OnReceiveAbort(DicomAbortSource source, DicomAbortReason reason)
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAbort:{source},{reason}");
- }
- public void OnConnectionClosed(Exception exception)
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnConnectionClosed:{exception}");
- }
- public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request)
- {
- try
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnCStoreRequest");
- var patientId = request.File.GetPatientId();
- IUS.Common.Log.Logger.WriteLineInfo($"Receive dicom,patientId:{patientId}");
- DicomUploadQueue.Instance.Enqueue(request.File);
- DicomForwardQueue.Instance.Enqueue(request.File);
- return new DicomCStoreResponse(request, DicomStatus.Success);
- }
- catch (Exception e)
- {
- IUS.Common.Log.Logger.WriteLineError($"OnCStoreRequest Error:{e}");
- }
- return new DicomCStoreResponse(request, DicomStatus.Cancel);
- }
- public void OnCStoreRequestException(string tempFileName, Exception e)
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnCStoreRequestException:{e}");
- }
- public DicomCEchoResponse OnCEchoRequest(DicomCEchoRequest request)
- {
- IUS.Common.Log.Logger.WriteLineInfo($"OnCEchoRequest");
- return new DicomCEchoResponse(request, DicomStatus.Success);
- }
- }
- }
|