VinnoDicomService.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using Dicom;
  2. using Dicom.Network;
  3. using System;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Vinno.FIS.Sonopost.Features.Config;
  7. namespace Vinno.FIS.Sonopost.Features.Dicom
  8. {
  9. public class VinnoDicomService : DicomService, IDicomServiceProvider, IDicomCStoreProvider, IDicomCEchoProvider
  10. {
  11. public VinnoDicomService(INetworkStream stream, Encoding fallbackEncoding, global::Dicom.Log.Logger log) : base(stream, fallbackEncoding, log)
  12. {
  13. }
  14. public Task OnReceiveAssociationRequestAsync(DicomAssociation association)
  15. {
  16. var title = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile;
  17. if (association.CalledAE != title)
  18. {
  19. IUS.Common.Log.Logger.WriteLineError($"AETITLE not match");
  20. return SendAssociationRejectAsync(
  21. DicomRejectResult.Permanent,
  22. DicomRejectSource.ServiceUser,
  23. DicomRejectReason.CalledAENotRecognized);
  24. }
  25. foreach (var pc in association.PresentationContexts)
  26. {
  27. if (pc.AbstractSyntax == DicomUID.Verification)
  28. pc.AcceptTransferSyntaxes(AcceptedTypes.AcceptedTransferSyntaxes);
  29. else if (pc.AbstractSyntax.StorageCategory != DicomStorageCategory.None)
  30. pc.AcceptTransferSyntaxes(AcceptedTypes.AcceptedImageTransferSyntaxes);
  31. }
  32. IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAssociationRequestAsync");
  33. return SendAssociationAcceptAsync(association);
  34. }
  35. public Task OnReceiveAssociationReleaseRequestAsync()
  36. {
  37. IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAssociationReleaseRequestAsync");
  38. return SendAssociationReleaseResponseAsync();
  39. }
  40. public void OnReceiveAbort(DicomAbortSource source, DicomAbortReason reason)
  41. {
  42. IUS.Common.Log.Logger.WriteLineInfo($"OnReceiveAbort:{source},{reason}");
  43. }
  44. public void OnConnectionClosed(Exception exception)
  45. {
  46. IUS.Common.Log.Logger.WriteLineInfo($"OnConnectionClosed:{exception}");
  47. }
  48. public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request)
  49. {
  50. try
  51. {
  52. IUS.Common.Log.Logger.WriteLineInfo($"OnCStoreRequest");
  53. var patientId = request.File.GetPatientId();
  54. IUS.Common.Log.Logger.WriteLineInfo($"Receive dicom,patientId:{patientId}");
  55. DicomUploadQueue.Instance.Enqueue(request.File);
  56. DicomForwardQueue.Instance.Enqueue(request.File);
  57. return new DicomCStoreResponse(request, DicomStatus.Success);
  58. }
  59. catch (Exception e)
  60. {
  61. IUS.Common.Log.Logger.WriteLineError($"OnCStoreRequest Error:{e}");
  62. }
  63. return new DicomCStoreResponse(request, DicomStatus.Cancel);
  64. }
  65. public void OnCStoreRequestException(string tempFileName, Exception e)
  66. {
  67. IUS.Common.Log.Logger.WriteLineInfo($"OnCStoreRequestException:{e}");
  68. }
  69. public DicomCEchoResponse OnCEchoRequest(DicomCEchoRequest request)
  70. {
  71. IUS.Common.Log.Logger.WriteLineInfo($"OnCEchoRequest");
  72. return new DicomCEchoResponse(request, DicomStatus.Success);
  73. }
  74. }
  75. }