private void SendData(SendDataType Type, int F1, int F2, int F3, int F4) { #if DEBUG UpdateText("SendData"); #endif SendDataData s = new SendDataData(); s.Header1 = 0x46; s.Header2 = 0x52; s.Header3 = 0x53; s.Header4 = 0x1; s.DataType = (int)Type; s.Flag1 = F1; s.Flag2 = F2; s.Flag3 = F3; s.Flag4 = F4; byte[] data = CommonUtilities.Serialize <SendDataData>(s); try { ws.Send(data); } catch (Exception ee) { Debug.WriteLine(ee.ToString()); } }
private void ProcessWsOnMessage(byte[] data) { try { lock (RecvBufferLock) { List <byte> Recv = new List <byte>(data); while (Recv.Count > 0) { RecvBuffer.Add(Recv[0]); Recv.RemoveAt(0); #region Header Test if (RecvBuffer.Count == 1) { if (RecvBuffer[0] != 0x46) { RecvBuffer.Clear(); continue; } } if (RecvBuffer.Count == 2) { if (RecvBuffer[1] != 0x52) { RecvBuffer.Clear(); continue; } } if (RecvBuffer.Count == 3) { if (RecvBuffer[2] != 0x53) { RecvBuffer.Clear(); continue; } } if (RecvBuffer.Count == 4) { if (RecvBuffer[3] != 0x1) { RecvBuffer.Clear(); continue; } } #endregion if (RecvBuffer.Count == Marshal.SizeOf(typeof(SendDataData))) { LastUpdated = DateTime.UtcNow; SendDataData ddd = CommonUtilities.Deserialize <SendDataData>(RecvBuffer.ToArray()); RecvBuffer.Clear(); Task.Run(() => { switch (ddd.DataType) { case (int)SendDataType.Keyboard: Redirs.MainScreenSystem.SetKeyboard(ddd.Flag3, ddd.Flag2, ddd.Flag1); break; case (int)SendDataType.Mouse: Redirs.MainScreenSystem.SetMousePosition(ddd.Flag1, ddd.Flag2, ddd.Flag3, ddd.Flag4); break; case (int)SendDataType.SetScreen: Redirs.MainScreenSystem.SetScreen(ddd.Flag1); break; case (int)SendDataType.DeltaScreen: { RWLck.EnterReadLock(); if (UploadBytes != null) { RWLck.ExitReadLock(); break; } RWLck.ExitReadLock(); RWLck.EnterWriteLock(); UploadBytes = Redirs.MainScreenSystem.GetDeltaScreen2(); Thread t = new Thread(UploaderThread); t.Start(); RWLck.ExitWriteLock(); //Debug.WriteLine("Screen D-Render Prep"); break; } case (int)SendDataType.RefreshScreen: { RWLck.EnterReadLock(); if (UploadBytes != null) { RWLck.ExitReadLock(); break; } RWLck.ExitReadLock(); RWLck.EnterWriteLock(); UploadBytes = Redirs.MainScreenSystem.GetFullscreen2(); Thread t = new Thread(UploaderThread); t.Start(); RWLck.ExitWriteLock(); //Debug.WriteLine("Screen F-Render Prep"); break; } case (int)SendDataType.ResetStream: Debug.WriteLine("Screen RESET Buffer"); RecvBuffer.Clear(); break; case (int)SendDataType.Disconnect: CloseAll(); return; default: Debug.WriteLine("Screen ??? unknown code " + ddd.DataType); return; } }); } } } } catch (Exception ee) { Debug.WriteLine("Screen RX/TX Error: " + ee.ToString()); } }