Example #1
0
        private void MqttClient_RcvDataEvent(byte[] data)
        {
            try
            {
                if (data?.Length > 0)
                {
                    switch (data[0])
                    {
                    case 0x00:
                        if (CommID.ToHexString() != data.SubArray(1, 4).ToHexString())
                        {
                            MqttClient.Unsubscribe(CommID.GetInt().ToString());
                            MqttClient.Subscribe(data.SubArray(1, 4).GetInt().ToString());
                        }
                        CommID   = data.SubArray(1, 4);
                        Password = data.SubArray(6, data[5]).ToASCIIString();
                        break;

                    case 0x01:
                        SelectServerEvent?.BeginInvoke(data[1], null, null);
                        break;

                    case 0x02:
                        RcvImageEvent?.BeginInvoke(data.SubArray(1, data.Length - 1).Bytes2BitMap(), null, null);
                        break;

                    case 0x03:
                        IsCompression    = data[1] == 1;
                        CompressionLevel = data[2];
                        break;

                    case 0x04:
                        IsSession = false;
                        Status    = 0;
                        break;

                    case 0x05:
                        RcvKeyEvent?.BeginInvoke(data[1], data[2], null, null);
                        break;

                    case 0x06:
                        int type = (data[1] << 8) | data[2];
                        int x    = (data[3] << 8) | data[4];
                        int y    = (data[5] << 8) | data[6];
                        int dw   = (data[7] << 24) | (data[8] << 16) | (data[9] << 8) | data[10];
                        int info = (data[11] << 24) | (data[12] << 16) | (data[13] << 8) | data[14];

                        MouseMoveEvent?.BeginInvoke(type, x, y, dw, info, null, null);
                        break;

                    case 0x07:
                        if (data.Length > 2)
                        {
                            string pwd = data.SubArray(6, data[5]).ToASCIIString();
                            OtherCommid    = data.SubArray(1, 4);
                            OtherCommidStr = OtherCommid.GetInt().ToString();
                            if (pwd == Password)
                            {
                                MqttClient?.Request(OtherCommidStr, new byte[] { 0x07, 0x00 });
                                IsSession = true;
                                Status    = 1;
                                Conn1Event?.BeginInvoke(null, null);
                            }
                            else
                            {
                                MqttClient?.Request(OtherCommidStr, new byte[] { 0x07, 0x01 });
                            }
                        }
                        else
                        {
                            if (data[1] == 0x00)
                            {
                                Status    = 2;
                                IsSession = true;
                            }
                            Conn2Event?.Invoke(data[1]);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "****" + ex.StackTrace);
            }
        }