private void Receive() { IPEndPoint ip = null; BinaryFormatter bf = new BinaryFormatter(); //Default Frame fixes guid and length FramePieceInfo CurrentPieceInfo = null; FramePieceInfo fpi; while (!cancellationTokenSource.IsCancellationRequested) { try { byte[] data = ClientReceive.Receive(ref ip); using (MemoryStream ms = new MemoryStream(data)) { fpi = bf.Deserialize(ms) as FramePieceInfo; Debug.WriteLine(ms.Length); } Debug.WriteLine($"\nReceived: {fpi.Id}"); Debug.WriteLine($"Received: {fpi.FrameBytes.Length}"); Debug.WriteLine($"Total: {fpi.TotalLength}"); if (CurrentPieceInfo == null) { CurrentPieceInfo = new FramePieceInfo(fpi.FrameBytes, fpi.Id) { TotalLength = fpi.TotalLength }; } else if (CurrentPieceInfo.Id == fpi.Id && CurrentPieceInfo.FrameBytes.Length <= CurrentPieceInfo.TotalLength) { //Merging received and current frame byte[] merged = AddImagePiece(CurrentPieceInfo.FrameBytes, fpi.FrameBytes); CurrentPieceInfo.FrameBytes = merged; } else { CheckForHit(CurrentPieceInfo); CurrentPieceInfo = new FramePieceInfo(fpi.FrameBytes, fpi.Id) { TotalLength = fpi.TotalLength }; } CheckForHit(CurrentPieceInfo); Debug.WriteLine("Buffer: " + CurrentPieceInfo?.FrameBytes.Length); } catch (SocketException ex) { } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
private void Send() { using (WebCam webCam = new WebCam()) { while (!cancellationTokenSource.IsCancellationRequested) { try { byte[] screenshotBytes = webCam.GetVideoCaptureBytes(); Guid id = Guid.NewGuid(); MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); using (var inputMs = new MemoryStream(screenshotBytes)) using (BinaryReader br = new BinaryReader(inputMs)) { FramePieceInfo fi = new FramePieceInfo(br.ReadBytes(64000), id) { TotalLength = screenshotBytes.Length }; bf.Serialize(ms, fi); //Thread.Sleep(15); while (fi.FrameBytes.Length > 0) { ClientSend.Send(ms.GetBuffer(), (int)ms.Length); ms = new MemoryStream(); fi.FrameBytes = br.ReadBytes(64000); bf.Serialize(ms, fi); Thread.Sleep(15); } } Debug.WriteLine($"Sent: {screenshotBytes.Length}"); Thread.Sleep(10); } catch (ObjectDisposedException oex) { } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
private void CheckForHit(FramePieceInfo CurrentPieceInfo) { if (CurrentPieceInfo.FrameBytes.Length == CurrentPieceInfo.TotalLength) { Debug.WriteLine("Hit"); Application.Current.Dispatcher.Invoke(() => { try { OnFrameChange(new ImageBrush(Screenshot.ByteToBitMapSource(CurrentPieceInfo.FrameBytes))); } catch (Exception ex) { } }); } }