Example #1
0
        /// <summary>
        /// 收到peerA的申请,回复两客户端remote
        /// </summary>
        /// <param name="userToken"></param>
        /// <param name="msg"></param>
        private void ReplyP2PSRequest(IUserToken userToken, ISocketProtocal msg)
        {
            var peerA = userToken.ID.ToIPPort();

            var natInfoA = new NatInfo()
            {
                IP   = peerA.Item1,
                Port = peerA.Item2,
                IsMe = false
            };

            var IDB = Encoding.UTF8.GetString(msg.Content);

            var peerB = IDB.ToIPPort();

            var natInfoB = new NatInfo()
            {
                IP   = peerB.Item1,
                Port = peerB.Item2,
                IsMe = false
            };

            base.SendAsync(IDB, PSocketMsg.Parse(SerializeHelper.ByteSerialize(natInfoA), TcpP2pType.P2PSResponse).ToBytes());
            base.SendAsync(userToken.ID, PSocketMsg.Parse(SerializeHelper.ByteSerialize(natInfoB), TcpP2pType.P2PSResponse).ToBytes());
        }
Example #2
0
        private void ReplyLogin(IUserToken userToken)
        {
            var list = SessionManager.ToList().Select(b => b.ID).ToList();

            if (list != null && list.Count > 0)
            {
                var data = SerializeHelper.ByteSerialize(list);

                ReplyBase(userToken, PSocketMsg.Parse(data, HolePunchingType.LoginResponse));
            }
        }
Example #3
0
        private void ReplyPeerListRequest(IUserToken userToken)
        {
            var ipPort = userToken.ID.ToIPPort();

            var natInfo = new NatInfo()
            {
                IP   = ipPort.Item1,
                Port = ipPort.Item2,
                IsMe = true
            };

            var data = SerializeHelper.ByteSerialize(natInfo);

            ReplyBase(userToken, PSocketMsg.Parse(data, TcpP2pType.PublicNatInfoResponse));
        }
Example #4
0
        public void SendFile(string fileName, Action <bool> complete)
        {
            if (File.Exists(fileName))
            {
                var fName = fileName.Substring(fileName.LastIndexOf("\\") + 1);

                var data = SerializeHelper.ByteSerialize(new FileMessage()
                {
                    FileName = fName, Length = new FileInfo(fileName).Length
                });

                _sender.SendInfo(data, (d) =>
                {
                    if (d)
                    {
                        _beginSend = true;
                        _sender.SendFile(fileName);
                        _beginSend = false;
                        OnSended?.Invoke();
                    }
                    complete?.Invoke(d);
                });
            }
        }
Example #5
0
 /// <summary>
 /// 发送图像到远程
 /// </summary>
 private void SendImage()
 {
     Task.Factory.StartNew(() =>
     {
         //Bitmap lastBitmap = null;
         Rectangle rectangle = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
         while (!_isClose)
         {
             try
             {
                 if (true)
                 {
                     using (Bitmap desktopImage = new Bitmap(rectangle.Width, rectangle.Height))
                     {
                         using (Graphics g = Graphics.FromImage(desktopImage))
                         {
                             try
                             {
                                 g.CopyFromScreen(0, 0, 0, 0, desktopImage.Size);
                             }
                             catch (Exception ex)
                             {
                                 continue;
                             }
                             MouseAndKeyHelper.DrawMouse(g);
                             //比较此次截图与上一张截图的差异
                             if (lastBitmap != null)
                             {
                                 List <Rectangle> rects = ImageComparer.Compare(lastBitmap, desktopImage);
                                 lastBitmap             = (Bitmap)desktopImage.Clone();
                                 if (rects.Count == 0)//无变化不发送
                                 {
                                     Thread.Sleep(sec);
                                 }
                                 if (rects.Count <= 480)//差异小于7块则分段传输
                                 {
                                     Dictionary <Rectangle, Bitmap> dic = new Dictionary <Rectangle, Bitmap>();
                                     foreach (var rect in rects)
                                     {
                                         Bitmap bmSmall = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppRgb);
                                         using (Graphics grSmall = Graphics.FromImage(bmSmall))
                                         {
                                             grSmall.DrawImage(desktopImage, 0, 0,
                                                               rect, GraphicsUnit.Pixel);
                                             grSmall.Save();
                                             grSmall.Dispose();
                                         }
                                         dic.Add(rect, (Bitmap)bmSmall.Clone());
                                     }
                                     if (dic.Count > 0)
                                     {
                                         _mCleint.SendFileSlice(_remote, CompressHelper.Compress(SerializeHelper.ByteSerialize(dic)));
                                         isBigChnage = false;
                                         Thread.Sleep(sec);
                                     }
                                 }
                                 else
                                 {//发送完整的图片
                                     if (isBigChnage == false)
                                     {
                                         SendImageFile(desktopImage, g);
                                         lastBitmap = (Bitmap)desktopImage.Clone();//要在之前否则销毁掉了
                                         Thread.Sleep(sec);
                                     }
                                     else
                                     {
                                         isBigChnage = false;
                                     }
                                 }
                             }
                             else
                             {                                              //第一张图片
                                 lastBitmap = (Bitmap)desktopImage.Clone(); //要在之前否则销毁掉了
                                 SendImageFile(desktopImage, g);
                                 Thread.Sleep(sec);
                             }
                         }
                     }
                 }
                 else
                 {
                     Thread.Sleep(100);
                 }
             }
             catch (Exception ex)
             {
                 continue;
             }
         }
     }, cts.Token);
 }
 /// <summary>
 ///     ioc所需初始化方法
 /// </summary>
 /// <param name="redisHelper"></param>
 public void CreateInstance(IRedisHelper redisHelper)
 {
     _redisHelper = SerializeHelper.ByteDeserialize <IRedisHelper>(SerializeHelper.ByteSerialize(redisHelper));
 }