private void VideoIcon_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { string srcId = App.user.userName; string destId = chatViewModel.selectedChatRoom.id; string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress; byte[] data = AppProtocol.PackControl(AppProtocol.ControlType.QVIDEO, srcId, destId); P2PSender.getInstance().SendData(data, targetIP, P2PListener.GENERALLISTENPORT); var video = new Video(targetIP); videoWindow = new videoWindow(video); videoWindow.Show(); }
// 发送文字消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender/UDPSender发送 private void SendWordMsg() { if (chatRoomList.SelectedIndex == -1) { MessageBox.Show("请选择聊天对象"); return; } if (msgTbx.Text == "") { MessageBox.Show("所发消息不能为空"); return; } string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress; int targetPort = P2PListener.GENERALLISTENPORT; string srcId = App.user.userName; string destId = chatViewModel.selectedChatRoom.id; if (groupChat.isGroupChatMsg(destId)) { // 群聊消息单独处理 groupChat.SendGroupWord(msgTbx.Text, destId); } else { byte[] data = AppProtocol.PackWord(msgTbx.Text, srcId, destId); if (isUDPCbx.IsChecked == true) { UDPSender.getInstance().ReliableSendData(data, targetIP); // udp 发送不支持指定端口 } else { P2PSender.getInstance().SendData(data, targetIP, targetPort); } } // 本地显示自己的话 chatViewModel.selectedChatRoom.msgList.Add(new Model.Message { description = msgTbx.Text, src = "我" }); updateUI(); msgTbx.Text = ""; }
// 接受到图片消息 private void recvNewPhoto(byte[] newData) { string srcId = null; string destId = null; System.Drawing.Bitmap bitmap = AppProtocol.UnPackPhoto(newData, ref srcId, ref destId); var newMsg = new Model.Message() { description = "", src = srcId, msg = bitmap, type = Model.Message.Type.Photo }; chatViewModel.selectedChatRoom.msgList.Add(newMsg); updateUI(); }
// 发送图片消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender发送 private void SendPhoto() { // 选择表情包 OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "图片文件|*.jpg;*.gif;*.bmp;*.png"; Nullable <bool> result = dlg.ShowDialog(); string filename = null; if (result != true) { return; } filename = dlg.FileName; System.Drawing.Bitmap bitmap; try { bitmap = new System.Drawing.Bitmap(filename); } catch (Exception ex) { MessageBox.Show(ex.Message, "图片不存在"); return; } // 封包发送 string srcId = App.user.userName; string destId = chatViewModel.selectedChatRoom.id; string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress; int targetPort = P2PListener.GENERALLISTENPORT; byte[] data = AppProtocol.PackPhoto(bitmap, srcId, destId); P2PSender.getInstance().SendData(data, targetIP, targetPort); chatViewModel.selectedChatRoom.msgList.Add(new Model.Message { src = "我", msg = bitmap }); updateUI(); }
private void recvNewFile(byte[] newData) { int totalNum = AppProtocol.findFileTotalNum(newData); if (fileBuffer == null) { fileBuffer = new byte[totalNum][]; } int seq = AppProtocol.findFileSeq(newData); var task = new Task(() => { fileBuffer[seq - 1] = AppProtocol.UnPackFileSeg(newData); }); task.Start(); recvCount++; if (recvCount == totalNum) { task.Wait(); string srcId = null; string destId = null; FileStream fstream = null; AppProtocol.UnPackFile(fileBuffer, newData, ref fstream, ref srcId, ref destId); double lenInMB = (double)fstream.Length / 1024 / 1024; string fileName = fstream.Name.Substring(fstream.Name.LastIndexOf('\\') + 1); chatViewModel.selectedChatRoom.msgList.Add(new Model.Message() { msg = fstream.Name, type = Model.Message.Type.File, description = $"文件: {fileName} / { lenInMB.ToString("F2")}MB", src = $"{srcId}:" }); fstream.Close(); updateUI(); fileBuffer = null; recvCount = 0; } }
public async Task UpdateDecision(AppProtocol closedProtocol) { var decisions = _limsExchangeService.DataService.GetEntity <AppDecision>(p => p.ProtocolId == closedProtocol.Id).ToList(); foreach (var decision in decisions) { if (decision.DecisionType == "Accepted") { CreateLicenseFromApplication(decision, closedProtocol); } else { decision.IsClosed = true; var app = _limsExchangeService.DataService .GetEntity <TrlApplication>(p => p.Id == decision.AppId).SingleOrDefault(); app.AppState = "Reviewed"; app.BackOfficeAppState = "Reviewed"; _limsExchangeService.DataService.SaveChanges(); } _limsExchangeService.CloseApplicationTRL(decision.AppId); } }
// 发送文件消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender发送 private void SendFileMsg() { // 选择文件 OpenFileDialog dlg = new OpenFileDialog(); Nullable <bool> result = dlg.ShowDialog(); string filename = null; if (result != true) { return; } filename = dlg.FileName; FileStream fstream = null; try { fstream = new FileStream(filename, FileMode.Open, FileAccess.Read); } catch (Exception e) { MessageBox.Show(e.Message, "文件不存在"); return; } // 调用应用层封包,调用传输层发送 string srcId = App.user.userName; string destId = chatViewModel.selectedChatRoom.id; string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress; int targetPort = P2PListener.FILELISTENPORT; byte[][] dataGroup = AppProtocol.PackFile(fstream, srcId, destId); fstream.Close(); P2PSender.getInstance().SendDataGroup(dataGroup, targetIP, targetPort); chatViewModel.selectedChatRoom.msgList.Add(new Model.Message { description = $"文件:{filename.Substring(filename.LastIndexOf('\\') + 1)}", src = "我" }); updateUI(); }
public async Task <ActionResult <List <NameValuePair> > > GetPacketType(string protocol) { bool ret = AppProtocol.TryParse(protocol, true, out AppProtocol inputAppProtocol); if (ret != true) { return(BadRequest("Can not get the request type.")); } List <NameValuePair> pairDict = new List <NameValuePair>(); var packetTypeList = Enum.GetNames(typeof(PacketType)) .Where(s => s.StartsWith(inputAppProtocol.ToString(), true, CultureInfo.CurrentCulture)).Select(s => new NameValuePair() { Name = s, Value = (int)Enum.Parse(typeof(PacketType), s) }); pairDict.AddRange(packetTypeList); if (pairDict.Count == 0) { return(BadRequest("Can not get the request type.")); } return(pairDict); }
public void CreateLicenseFromApplication(AppDecision decision, AppProtocol protocol) { var application = _dataService.GetEntity <TrlApplication>(trlApplication => trlApplication.Id == decision.AppId) .FirstOrDefault(); long id = 0; if (application == null) { Log.Error("[TRL]CreateLicenseFromApplication - Заяву не знайдено"); return; } var oldLicense = _dataService .GetEntity <TrlLicense>(x => x.OrgUnitId == application.OrgUnitId && x.LicState == "Active" && x.IsRelevant) .FirstOrDefault(); try { if (decision == null) { Log.Error("[TRL]CreateLicenseFromApplication - Рішення не знайдено"); application.ErrorProcessingLicense = "Рішення не знайдено"; throw new Exception(); } decision.IsClosed = true; _dataService.SaveChanges(); if (protocol == null) { Log.Error("[TRL]CreateLicenseFromApplication - Протокол не знайдено"); application.ErrorProcessingLicense = "Протокол не знайдено"; throw new Exception(); } if (application.AppSort == "GetLicenseApplication" || application.AppSort == "IncreaseToTRLApplication") { if (oldLicense != null) { Log.Error("[TRL]CreateLicenseFromApplication - У даного СГД вже є активна ліцензія"); application.ErrorProcessingLicense = "У даного СГД вже є активна ліцензія"; throw new Exception(); } } else { if (oldLicense == null) { Log.Error("[TRL]CreateLicenseFromApplication - У даного СГД немає активної ліцензії"); application.ErrorProcessingLicense = "У даного СГД немає активної ліцензії"; throw new Exception(); } oldLicense.IsRelevant = false; id = oldLicense.OldLimsId; } } catch (Exception) { _dataService.SaveChanges(); return; } long limsId = -1; if (application.AppSort == "GetLicenseApplication" || application.AppSort == "IncreaseToTRLApplication" || application.AppSort == "CancelLicenseApplication" || application.AppSort == "DecreaseTRLApplication" //|| application.AppSort == "ChangeAutPersonApplication" || application.AppSort == "AddBranchApplication" || application.AppSort == "RemBranchApplication" //|| application.AppSort == "ChangeDrugList" //|| application.AppSort == "ReplacementDrugList" ) { try { limsId = _limsExchangeService.InsertLicenseTRL(decision.AppId).Result; } catch (Exception e) { Log.Error(e.Message); return; } } else { //lims insert for other sorts of application limsId = id;//id of new limsDoc } var newLicense = new TrlLicense { OldLimsId = limsId, OrgUnitId = application.OrgUnitId, Id = Guid.NewGuid(), ParentId = application.Id, LicType = "TRL", LicState = "Active", IsRelevant = true, LicenseDate = decision.DateOfStart, OrderNumber = protocol.OrderNumber, OrderDate = protocol.OrderDate.Value }; switch (application.AppSort) { case "RemBranchApplication": { var appBranches = _dataService.GetEntity <ApplicationBranch>(x => x.LimsDocumentId == application.Id).Select(x => x.BranchId).ToList(); var branches = _dataService.GetEntity <Branch>(x => appBranches.Contains(x.Id) && x.LicenseDeleteCheck == true).ToList(); branches.ForEach(x => x.RecordState = RecordState.D); branches.ForEach(x => x.BranchActivity = "Closed"); break; } case "CancelLicenseApplication": case "DecreaseTRLApplication": newLicense.LicState = "Canceled"; break; case "AddBranchInfoApplication": { var appBranches = _dataService.GetEntity <ApplicationBranch>(x => x.LimsDocumentId == application.Id) .Select(x => x.BranchId).ToList(); var branches = _dataService .GetEntity <Branch>(x => appBranches.Contains(x.Id)).ToList(); foreach (var branch in branches) { List <Dictionary <string, string> > operationListForm; try { operationListForm = JsonConvert.DeserializeObject <List <Dictionary <string, string> > >( branch.OperationListForm); } catch (Exception) { operationListForm = new List <Dictionary <string, string> >(); } List <Dictionary <string, string> > operationListFormChanging; try { operationListFormChanging = JsonConvert.DeserializeObject <List <Dictionary <string, string> > >( branch.OperationListFormChanging); } catch (Exception) { operationListFormChanging = new List <Dictionary <string, string> >(); } foreach (var itemChanging in operationListFormChanging) { var exists = false; var itemValueChanging = itemChanging.FirstOrDefault().Value; foreach (var item in operationListForm) { var itemValue = item.FirstOrDefault().Value; if (itemValueChanging == itemValue) { exists = true; break; } } if (exists == false) { operationListForm.Add(itemChanging); } } branch.OperationListForm = JsonConvert.SerializeObject(operationListForm.OrderBy(x => x.FirstOrDefault().Value)); branch.OperationListFormChanging = null; } break; } } _dataService.Add(newLicense); application.AppState = "Reviewed"; application.BackOfficeAppState = "Reviewed"; _dataService.SaveChanges(); }
/// <summary> /// Converts the <paramref name="sourceValue" /> parameter to the <paramref name="destinationType" /> parameter using <paramref /// name="formatProvider" /> and <paramref name="ignoreCase" /> /// </summary> /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param> /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param> /// <param name="formatProvider">not used by this TypeConverter.</param> /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param> /// <returns> /// an instance of <see cref="AppProtocol" />, or <c>null</c> if there is no suitable conversion. /// </returns> public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => AppProtocol.CreateFrom(sourceValue);
//public MailConnection() { } /// <summary> /// Construct a connection object from parameters. /// </summary> /// <param name="Server">DNS service name</param> /// <param name="Port">IP Port number</param> /// <param name="AppProtocol">Application protocol prefix.</param> /// <param name="Account">Account name for authenticaiton</param> /// <param name="Password">Password for authenticaiton</param> /// <param name="TLSMode">TLS Mode, may be Raw, Upgrade or None.</param> /// <param name="SecureAuth">If true, a /// secure authentication mechanism must be used.</param> public Connection(string Server, int Port, AppProtocol AppProtocol, string Account, string Password, TLSMode TLSMode, bool SecureAuth) { this.ServiceName = Server; this.Port = Port; this.AppProtocol = AppProtocol; this.UserName = Account; this.Password = Password; this.TLSMode = TLSMode; this.SecureAuth = SecureAuth; }
private static void CheckReceivedValue(string value) { if (AppProtocol.IsCommand(value)) { string command = AppProtocol.GetCommand(value); switch (command) { case AppProtocol.AppToUnity.BG_COLOR: string color = AppProtocol.GetParam(value); OnReceive(ReceiveType.BG_COLOR, color); break; case AppProtocol.AppToUnity.AVATAR_REMOVE: OnReceive(ReceiveType.AVATAR_REMOVE); break; case AppProtocol.AppToUnity.ANIM_RUN: switch (AppProtocol.GetParam(value)) { case AppProtocol.AppToUnity.PARAM_TRUE: OnReceive(ReceiveType.ANIM_RUN_TRUE); break; case AppProtocol.AppToUnity.PARAM_FALSE: OnReceive(ReceiveType.ANIM_RUN_FALSE); break; default: SendCommand(SendType.ERROR_PARAMS); break; } break; case AppProtocol.AppToUnity.ANIM_GREETINGS: OnReceive(ReceiveType.ANIM_GREETINGS); break; case AppProtocol.AppToUnity.AVATAR_CREATE: string[] avatarAttrs = AppProtocol.GetParams(value); if (avatarAttrs.Length != 5) { SendCommand(SendType.ERROR_PARAMS); } else { OnReceive(ReceiveType.AVATAR_CREATE, avatarAttrs); } break; case AppProtocol.AppToUnity.SPEECH: string filename = AppProtocol.GetParam(value); OnReceive(ReceiveType.SPEECH, filename); break; case AppProtocol.AppToUnity.CAMERA_TARGET: string target = AppProtocol.GetParam(value); if (!target.Equals(AppProtocol.AppToUnity.PARAM_CAMERA_TARGET_HALF_BODY) && !target.Equals(AppProtocol.AppToUnity.PARAM_CAMERA_TARGET_UPPER_BODY) && !target.Equals(AppProtocol.AppToUnity.PARAM_CAMERA_TARGET_HEAD)) { Debug.LogError("[APPSOCKET] Received invalid target param: " + target); SendCommand(SendType.ERROR_PARAMS); } else { OnReceive(ReceiveType.CAMERA_TARGET, target); } break; case AppProtocol.AppToUnity.CAMERA_ANGLE: string angleStr = AppProtocol.GetParam(value); int angle; if (!int.TryParse(angleStr, out angle)) { Debug.LogError("[APPSOCKET] Received invalid angle param. It's not a valid integer: " + angleStr); SendCommand(SendType.ERROR_PARAMS); } else { if (angle < 0 || angle > 360) { Debug.LogError("[APPSOCKET] Received invalid angle param. Should be [0, 360]: " + angleStr); SendCommand(SendType.ERROR_PARAMS); } else { OnReceive(ReceiveType.CAMERA_ANGLE, angleStr); } } break; case AppProtocol.AppToUnity.CAMERA_DISTANCE: string distanceStr = AppProtocol.GetParam(value); float distance; if (!float.TryParse(distanceStr, out distance)) { Debug.LogError("[APPSOCKET] Received invalid distance param. It's not a valid float: " + distanceStr); SendCommand(SendType.ERROR_PARAMS); } else { if (distance < 0 || distance > 100) { Debug.LogError("[APPSOCKET] Received invalid distance param. Should be [0, 100]: " + distanceStr); SendCommand(SendType.ERROR_PARAMS); } else { OnReceive(ReceiveType.CAMERA_DISTANCE, distanceStr); } } break; case AppProtocol.AppToUnity.CAMERA_HEIGHT: string heightStr = AppProtocol.GetParam(value); float height; if (!float.TryParse(heightStr, out height)) { Debug.LogError("[APPSOCKET] Received invalid height param. It's not a valid float: " + heightStr); SendCommand(SendType.ERROR_PARAMS); } else { if (height < -100 || height > 100) { Debug.LogError("[APPSOCKET] Received invalid height param. Should be [-100, 100]: " + heightStr); SendCommand(SendType.ERROR_PARAMS); } else { OnReceive(ReceiveType.CAMERA_HEIGHT, heightStr); } } break; case AppProtocol.AppToUnity.TEST: OnReceive(ReceiveType.TEST); break; case AppProtocol.AppToUnity.ERROR_PARAMS: Debug.LogError("[APPSOCKET] Received error from App: Wrong parameters number"); OnReceive(ReceiveType.ERROR_PARAMS); break; case AppProtocol.AppToUnity.ERROR_COMMAND: Debug.LogError("[APPSOCKET] Received error from App: Invalid command"); OnReceive(ReceiveType.ERROR_COMMAND); break; default: SendCommand(SendType.ERROR_COMMAND); break; } } }
// 控制报文的发送散落于音视频会话,群聊创建等有需要的过程中 // --------------------------- 收到控制报文 ------------------------- private void RecvControl(byte[] newData) { string srcId = null; string destId = null; string optional = null; var ctype = AppProtocol.UnPackControl(newData, ref srcId, ref destId, ref optional); if (ctype == AppProtocol.ControlType.NEWGROUP) { App.addressBook.items.Add(new Model.AddressBook.Item() { UserName = srcId, GroupUserName = optional.Split(';'), Alias = srcId, isGroup = true }); return; } string targetIP = null; foreach (var item in chatViewModel.chatRoomViewModels) { if (item.addressInfo.UserName == srcId) { targetIP = item.addressInfo.IPAddress; } } targetIP = chatViewModel.chatRoomViewModels[0].addressInfo.IPAddress; // debugTemp if (targetIP == null) // 收到非好友视频邀请不处理 { return; } switch (ctype) { case AppProtocol.ControlType.QAUDIO: var result = MessageBox.Show($"{srcId}邀请您进行音频聊天,是否接受?", "新音频邀请", MessageBoxButton.YesNo); if (result == MessageBoxResult.No) { P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.RAUDIO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT); } else { P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.AAUDIO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT); var audio = new Audio(targetIP); audioWindow = new audioWindow(audio); audioWindow.Show(); } break; case AppProtocol.ControlType.AAUDIO: break; case AppProtocol.ControlType.RAUDIO: audioWindow.audio.isChatting = false; audioWindow.Close(); break; case AppProtocol.ControlType.QVIDEO: result = MessageBox.Show($"{srcId}邀请您进行视频聊天,是否接受?", "新视频邀请", MessageBoxButton.YesNo); if (result == MessageBoxResult.No) { P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.RVIDEO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT); } else { P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.AVIDEO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT); var video = new Video(targetIP); var videoWindow = new videoWindow(video); videoWindow.Show(); } break; case AppProtocol.ControlType.AVIDEO: break; case AppProtocol.ControlType.RVIDEO: videoWindow.video.isReject = true; videoWindow.Close(); MessageBox.Show("对方拒绝了你的视频邀请"); break; default: break; } }