コード例 #1
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
        internal static Task <ButtplugFFIServerMessage> SendConnectLocal(
            ButtplugFFIMessageSorter aSorter,
            ButtplugFFIClientHandle aHandle,
            string aServerName,
            uint aMaxPingTime,
            bool aAllowRawMessages,
            string aDeviceConfigJSON,
            string aUserDeviceConfigJSON,
            ushort aDeviceCommManagerTypes,
            ButtplugCallback aCallback,
            IntPtr aCallbackCtx)
        {
            var msg = new ClientMessage();

            msg.Message = new ClientMessage.Types.FFIMessage();
            msg.Message.ConnectLocal = new ClientMessage.Types.ConnectLocal
            {
                ServerName                  = aServerName,
                MaxPingTime                 = aMaxPingTime,
                AllowRawMessages            = aAllowRawMessages,
                DeviceConfigurationJson     = aDeviceConfigJSON ?? "",
                UserDeviceConfigurationJson = aUserDeviceConfigJSON ?? "",
                CommManagerTypes            = aDeviceCommManagerTypes
            };
            return(SendClientMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }
コード例 #2
0
        internal static ButtplugFFIClientHandle SendCreateClient(string aClientName, ButtplugCallback aCallback)
        {
            var builder           = new FlatBufferBuilder(1024);
            var client_name       = builder.CreateString(aClientName);
            var create_client_msg = CreateClient.CreateCreateClient(builder, client_name);

            builder.Finish(create_client_msg.Value);
            var buf = builder.SizedByteArray();

            return(ButtplugFFICalls.buttplug_create_client(aCallback, buf, buf.Length));
        }
コード例 #3
0
        protected ButtplugClient(string aClientName, ButtplugCallback aCallback)
        {
            Name = aClientName;
            SorterCallbackDelegate = aCallback;
            var context     = new WeakReference(this);
            var clientIndex = _clientCounter;

            // Since we can pass the handle, I don't *think* this needs to be pinned?
            _indexHandle = GCHandle.Alloc(clientIndex);
            _clientStorage.Add(_clientCounter, context);
            _clientHandle = ButtplugFFI.SendCreateClient(aClientName, SorterCallbackDelegate, GCHandle.ToIntPtr(_indexHandle));
        }
コード例 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ButtplugClientDevice"/> class, using
 /// discrete parameters.
 /// </summary>
 /// <param name="aIndex">The device index.</param>
 /// <param name="aName">The device name.</param>
 /// <param name="aMessages">The device allowed message list, with corresponding attributes.</param>
 internal ButtplugClientDevice(ButtplugFFIMessageSorter aSorter,
                               ButtplugFFIDeviceHandle aHandle,
                               uint aIndex,
                               string aName,
                               Dictionary <ServerMessage.Types.MessageAttributeType, ButtplugMessageAttributes> aAllowedMessages,
                               ButtplugCallback aCallback,
                               IntPtr aCallbackCtx)
 {
     Sorter            = aSorter;
     Handle            = aHandle;
     Index             = aIndex;
     Name              = aName;
     AllowedMessages   = aAllowedMessages;
     SorterCallback    = aCallback;
     SorterCallbackCtx = aCallbackCtx;
 }
コード例 #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ButtplugClientDevice"/> class, using
 /// discrete parameters.
 /// </summary>
 /// <param name="aIndex">The device index.</param>
 /// <param name="aName">The device name.</param>
 /// <param name="aAllowedMessages">The device allowed message list, with corresponding attributes.</param>
 internal ButtplugClientDevice(ButtplugFFIMessageSorter aSorter,
                               ButtplugFFIDeviceHandle aHandle,
                               uint aIndex,
                               string aName,
                               Dictionary <ServerMessage.Types.MessageAttributeType, ButtplugMessageAttributes> aAllowedMessages,
                               ButtplugCallback aCallback,
                               IntPtr aCallbackCtx)
 {
     _disposeLock       = new object();
     _disposed          = false;
     _sorter            = aSorter;
     _handle            = aHandle;
     Index              = aIndex;
     Name               = aName;
     AllowedMessages    = aAllowedMessages;
     _sorterCallback    = aCallback;
     _sorterCallbackCtx = aCallbackCtx;
 }
コード例 #6
0
        protected ButtplugClient(string aClientName, ButtplugCallback aCallback)
        {
            Name = aClientName;
            _sorterCallbackDelegate = aCallback;
            _disposeLock            = new object();

            _messageSorter = new ButtplugFFIMessageSorter();
            _devices       = new Dictionary <uint, ButtplugClientDevice>();

            var context     = new WeakReference(this);
            var clientIndex = _clientCounter;

            _clientCounter += 1;

            // Since we can pass the handle, I don't *think* this needs to be pinned?
            _indexHandle = GCHandle.Alloc(clientIndex);
            _clientStorage.Add(clientIndex, context);
            _clientHandle = ButtplugFFI.SendCreateClient(aClientName, _sorterCallbackDelegate, GCHandle.ToIntPtr(_indexHandle));
        }
コード例 #7
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
 internal static extern void buttplug_device_protobuf_message(ButtplugFFIDeviceHandle client_handle, byte[] buf, int buf_length, ButtplugCallback callback, IntPtr ctx);
コード例 #8
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
 internal static extern ButtplugFFIClientHandle buttplug_create_protobuf_client(string client_name, ButtplugCallback callback, IntPtr ctx);
コード例 #9
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
        internal static Task <ButtplugFFIServerMessage> SendVibrateCmd(ButtplugFFIMessageSorter aSorter, ButtplugFFIDeviceHandle aHandle, uint aDeviceIndex, Dictionary <uint, double> aSpeeds, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var msg = new DeviceMessage();

            msg.Message = new DeviceMessage.Types.FFIMessage();
            var command_list = new List <DeviceMessage.Types.VibrateComponent>();

            foreach (var pair in aSpeeds)
            {
                command_list.Add(new DeviceMessage.Types.VibrateComponent {
                    Index = pair.Key,
                    Speed = pair.Value,
                });
            }
            msg.Index = aDeviceIndex;
            var vibrate_cmd = new DeviceMessage.Types.VibrateCmd();

            vibrate_cmd.Speeds.Add(command_list);
            msg.Message.VibrateCmd = vibrate_cmd;
            return(SendDeviceMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }
コード例 #10
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
        internal static Task <ButtplugFFIServerMessage> SendPing(ButtplugFFIMessageSorter aSorter, ButtplugFFIClientHandle aHandle, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var msg = new ClientMessage();

            msg.Message      = new ClientMessage.Types.FFIMessage();
            msg.Message.Ping = new ClientMessage.Types.Ping
            {
            };
            return(SendClientMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }
コード例 #11
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
        internal static Task <ButtplugFFIServerMessage> SendConnectWebsocket(ButtplugFFIMessageSorter aSorter, ButtplugFFIClientHandle aHandle, string aAddress, bool aIgnoreCert, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var msg = new ClientMessage();

            msg.Message = new ClientMessage.Types.FFIMessage();
            msg.Message.ConnectWebsocket = new ClientMessage.Types.ConnectWebsocket
            {
                Address = aAddress,
                BypassCertVerification = aIgnoreCert,
            };
            return(SendClientMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }
コード例 #12
0
 internal static ButtplugFFIClientHandle SendCreateClient(string aClientName, ButtplugCallback aCallback)
 {
     return(ButtplugFFICalls.buttplug_create_client(aCallback, aClientName));
 }
コード例 #13
0
        internal static Task <ButtplugFFIServerMessage> SendStopAllDevices(ButtplugFFIMessageSorter aSorter, ButtplugFFIClientHandle aHandle, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var msg = new ClientMessage
            {
                Message = new ClientMessage.Types.FFIMessage
                {
                    StopAllDevices = new ClientMessage.Types.StopAllDevices()
                }
            };

            return(SendClientMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }
コード例 #14
0
        internal static Task <ButtplugFFIServerMessage> SendDeviceMessage(ButtplugFFIMessageSorter aSorter, ButtplugFFIDeviceHandle aHandle, DeviceMessage aMsg, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var task = aSorter.PrepareDeviceMessage(aMsg);
            var buf  = aMsg.ToByteArray();

            ButtplugFFICalls.ButtplugDeviceProtobufMessage(aHandle, buf, buf.Length, aCallback, aCallbackCtx);
            return(task);
        }
コード例 #15
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
 internal static ButtplugFFIClientHandle SendCreateClient(string aClientName, ButtplugCallback aCallback, IntPtr aCallbackCtx)
 {
     return(ButtplugFFICalls.buttplug_create_protobuf_client(aClientName, aCallback, aCallbackCtx));
 }
コード例 #16
0
 internal static extern ButtplugFFIClientHandle ButtplugCreateProtobufClient(string client_name, ButtplugCallback callback, IntPtr ctx);
コード例 #17
0
 internal static extern void ButtplugClientProtobufMessage(ButtplugFFIClientHandle client_handle, byte[] buf, int buf_length, ButtplugCallback callback, IntPtr ctx);
コード例 #18
0
 internal static extern ButtplugFFIClientHandle buttplug_create_client(ButtplugCallback callback, byte[] buf, int buf_length);
コード例 #19
0
ファイル: ButtplugFFI.cs プロジェクト: Yoooi0/buttplug-rs-ffi
        internal static Task <ButtplugFFIServerMessage> SendClientMessage(ButtplugFFIMessageSorter aSorter, ButtplugFFIClientHandle aHandle, ClientMessage aMsg, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var task = aSorter.PrepareClientMessage(aMsg);
            var buf  = aMsg.ToByteArray();

            ButtplugFFICalls.buttplug_client_protobuf_message(aHandle, buf, buf.Length, aCallback, aCallbackCtx);
            return(task);
        }
コード例 #20
0
 internal static extern ButtplugFFIClientHandle buttplug_create_client(ButtplugCallback callback, string client_name);
コード例 #21
0
 public ButtplugClient(string aClientName)
 {
     Name = aClientName;
     SorterCallbackDelegate = SorterCallback;
     _clientHandle          = ButtplugFFI.SendCreateClient(aClientName, SorterCallbackDelegate);
 }
コード例 #22
0
        internal static Task <ButtplugFFIServerMessage> SendDisconnect(ButtplugFFIMessageSorter aSorter, ButtplugFFIClientHandle aHandle, ButtplugCallback aCallback, IntPtr aCallbackCtx)
        {
            var msg = new ClientMessage
            {
                Message = new ClientMessage.Types.FFIMessage
                {
                    Disconnect = new ClientMessage.Types.Disconnect()
                }
            };

            return(SendClientMessage(aSorter, aHandle, msg, aCallback, aCallbackCtx));
        }