buttplug 2.1.5

Buttplug Intimate Hardware Control Library
Documentation
syntax = "proto3";
package handyplug;

/*
[
  {
    "Ok": {
      "Id": 1
    }
  }
]
*/

message Ok {
    uint32 Id = 1;
}

/*
[
  {
    "Error": {
      "Id": 1,
      "ErrorMessage": "Server received invalid JSON.",
      "ErrorCode": 3
    }
  }
]
*/

message Error {
    uint32 Id = 1;
    string ErrorMessage = 2;
    int32 ErrorCode = 3;
}

/*
[
  {
    "Ping": {
      "Id": 1
    }
  }
]
*/

message Ping {
    uint32 Id = 1;
}

/*
[
  {
    "RequestServerInfo": {
      "Id": 1,
      "ClientName": "Test Client",
      "MessageVersion": 1
    }
  }
]
*/

message RequestServerInfo {
  uint32 Id = 1;
  string ClientName = 2;
  uint32 MessageVersion = 3;
}

/*
[
  {
    "ServerInfo": {
      "Id": 1,
      "ServerName": "Test Server",
      "MessageVersion": 1,
      "MaxPingTime": 100
    }
  }
]
*/

message ServerInfo {
  uint32 Id = 1;
  string ServerName = 2;
  uint32 MessageVersion = 3;
  uint32 MaxPingTime = 4;
}

/*
[
  {
    "LinearCmd": {
      "Id": 1,
      "DeviceIndex": 0,
      "Vectors": [
        {
          "Index": 0,
          "Duration": 500,
          "Position": 0.3
        },
        {
          "Index": 1,
          "Duration": 1000,
          "Position": 0.8
        }
      ]
    }
  }
]
*/

message LinearCmd {
    uint32 Id = 1;
    uint32 DeviceIndex = 2;
    message Vector {
        uint32 Index = 1;
        uint32 Duration = 2;
        double Position = 3;
    }
    repeated Vector Vectors = 3;
}

message Message {
    oneof Message {
        /* Status Messages */
        Ok Ok = 100;
        Error Error = 101;
        Ping Ping = 102;
        /* Handshake Messages */
        RequestServerInfo RequestServerInfo = 200;
        ServerInfo ServerInfo = 201;
        /* Generic Device Messages */
        LinearCmd LinearCmd = 403;
    }
}

message Payload { 
    repeated Message Messages = 1;
}