using Dicom; using Dicom.Network; using System; using Vinno.FIS.Sonopost.Features.Config; using Vinno.IUS.Common.Log; using DicomClient = Dicom.Network.Client.DicomClient; namespace Vinno.FIS.Sonopost.Features.Dicom { internal class DicomForwardQueue : DicomOperateQueue { private static volatile DicomForwardQueue _instance; public static DicomForwardQueue Instance => _instance ?? (_instance = new DicomForwardQueue()); private DicomForwardQueue() : base("ForwardDicomQueue") { } protected override bool DoWork(DicomFile dicomFile) { try { var useProxy = SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy; if (useProxy) { var patientId = dicomFile.GetPatientId(); var newGuid = Guid.NewGuid().ToString("N").ToUpper(); SendToWorkstation(dicomFile, patientId); } } catch (Exception e) { Logger.WriteLineError($"Forward dicom Error:{e}"); } return true; } protected override bool DoWork(VidInfo vidInfo) { return false; } private async void SendToWorkstation(DicomFile file, string patientId) { try { //TODO:send to list of server Logger.WriteLineInfo($"Begin send dicom to third workstation,PatientId:{patientId}"); var address = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress; var port = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort; var targetAeTitle = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle; var localAeTitle = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile; var dicomClient = new DicomClient(address, port, false, localAeTitle, targetAeTitle); await dicomClient.AddRequestAsync(new DicomCStoreRequest(file)); await dicomClient.SendAsync(); Logger.WriteLineInfo($"End send dicom to third workstation,PatientId:{patientId}"); } catch (Exception ex) { Logger.WriteLineError($"SendToWorkstation error:{ex.Message}"); } } } }