public Task Set(byte parameter, object value, byte size, CancellationToken cancellationToken = default) { if (size < 1 || size > 4) { throw new ArgumentOutOfRangeException(nameof(size), size, "Size must be between 1 and 4"); } using (var writer = new PayloadWriter()) { writer.WriteByte(parameter); writer.WriteByte(size); switch (size) { case 1: writer.WriteByte(Convert.ToByte(value)); break; case 2: writer.WriteInt16(Convert.ToInt16(value)); break; case 3: writer.WriteInt24(Convert.ToInt16(value)); break; case 4: writer.WriteInt32(Convert.ToInt32(value)); break; } var command = new Command(CommandClass, ConfigurationCommand.Set, writer.ToPayload()); return(Send(command, cancellationToken)); } }
private static PayloadWriter CreateCapabilitiesPayload(ProtocolCapabilities serverCapabilities, ConnectionSettings cs, bool useCompression, ProtocolCapabilities additionalCapabilities = 0) { var writer = new PayloadWriter(); writer.WriteInt32((int)( ProtocolCapabilities.Protocol41 | ProtocolCapabilities.LongPassword | ProtocolCapabilities.SecureConnection | (serverCapabilities & ProtocolCapabilities.PluginAuth) | (serverCapabilities & ProtocolCapabilities.PluginAuthLengthEncodedClientData) | ProtocolCapabilities.MultiStatements | ProtocolCapabilities.MultiResults | ProtocolCapabilities.LocalFiles | (string.IsNullOrWhiteSpace(cs.Database) ? 0 : ProtocolCapabilities.ConnectWithDatabase) | (cs.UseAffectedRows ? 0 : ProtocolCapabilities.FoundRows) | (useCompression ? ProtocolCapabilities.Compress : ProtocolCapabilities.None) | (serverCapabilities & ProtocolCapabilities.ConnectionAttributes) | (serverCapabilities & ProtocolCapabilities.DeprecateEof) | additionalCapabilities)); writer.WriteInt32(0x4000_0000); writer.WriteByte((byte)CharacterSet.Utf8Mb4Binary); writer.Write(new byte[23]); return(writer); }