コード例 #1
0
        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();
        }
コード例 #2
0
        // 发送文字消息,调用应用层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 = "";
        }
コード例 #3
0
        // 接受到图片消息
        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();
        }
コード例 #4
0
        // 发送图片消息,调用应用层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();
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
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);
            }
        }
コード例 #7
0
        // 发送文件消息,调用应用层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();
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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();
        }
コード例 #10
0
 /// <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);
コード例 #11
0
        //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;

            }
コード例 #12
0
ファイル: AppSocket.cs プロジェクト: hafewa/FaceToFace-Unity
    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;
            }
        }
    }
コード例 #13
0
        // 控制报文的发送散落于音视频会话,群聊创建等有需要的过程中
        // --------------------------- 收到控制报文 -------------------------

        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;
            }
        }