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