/// <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()); }
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)); } }
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)); }
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); }); } }
/// <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)); }