Example #1
0
        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());
            }
        }
Example #2
0
        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());
            }
        }