MCPcopy Create free account
hub / github.com/buttplugio/buttplug / parse_message

Method parse_message

crates/buttplug_server/src/server.rs:242–322  ·  view source on GitHub ↗

Sends a [ButtplugClientMessage] to be parsed by the server (for handshake or ping), or passed into the server's [DeviceManager] for communication with devices.

(
    &self,
    msg: ButtplugClientMessageVariant,
  )

Source from the content-addressed store, hash-verified

240 /// Sends a [ButtplugClientMessage] to be parsed by the server (for handshake or ping), or passed
241 /// into the server's [DeviceManager] for communication with devices.
242 pub fn parse_message(
243 &self,
244 msg: ButtplugClientMessageVariant,
245 ) -> BoxFuture<'static, Result<ButtplugServerMessageVariant, ButtplugServerMessageVariant>> {
246 let features = self.device_manager().feature_map();
247 let msg_id = msg.id();
248 trace!("Server received: {:?}", msg);
249 let v = msg.version();
250 let spec_version = if let Some(current_version) = self.spec_version() {
251 current_version
252 } else {
253 info!("Setting Buttplug Server Message Spec version to {}", v);
254 v
255 };
256 match msg {
257 ButtplugClientMessageVariant::V4(msg) => {
258 let internal_msg =
259 match ButtplugCheckedClientMessageV4::try_from_client_message(msg, &features) {
260 Ok(m) => m,
261 Err(e) => {
262 let mut err_msg = ErrorV0::from(e);
263 err_msg.set_id(msg_id);
264 return future::ready(Err(ButtplugServerMessageVariant::from(
265 ButtplugServerMessageV4::from(err_msg),
266 )))
267 .boxed();
268 }
269 };
270 let fut = self.parse_checked_message(internal_msg);
271 async move {
272 Ok(
273 fut
274 .await
275 .map_err(|e| ButtplugServerMessageVariant::from(ButtplugServerMessageV4::from(e)))?
276 .into(),
277 )
278 }
279 .boxed()
280 }
281 msg => {
282 let converter = ButtplugServerMessageConverter::new(Some(msg.clone()));
283 match ButtplugCheckedClientMessageV4::try_from_client_message(msg, &features) {
284 Ok(converted_msg) => {
285 trace!("Converted message: {:?}", converted_msg);
286 let fut = self.parse_checked_message(converted_msg);
287 async move {
288 let result = fut.await.map_err(|e| {
289 converter
290 .convert_outgoing(&e.into(), &spec_version)
291 .unwrap()
292 })?;
293 let out_msg = converter
294 .convert_outgoing(&result, &spec_version)
295 .map_err(|e| {
296 converter
297 .convert_outgoing(
298 &ButtplugServerMessageV4::from(ErrorV0::from(e)),
299 &spec_version,

Calls 10

OkClass · 0.85
feature_mapMethod · 0.80
device_managerMethod · 0.80
spec_versionMethod · 0.80
parse_checked_messageMethod · 0.80
cloneMethod · 0.80
convert_outgoingMethod · 0.80
idMethod · 0.45
versionMethod · 0.45
set_idMethod · 0.45