Struct my_rust_socketio::client::RawClient
source · pub struct RawClient { /* private fields */ }
Expand description
A socket which handles communication with the server. It’s initialized with
a specific address as well as an optional namespace to connect to. If None
is given the server will connect to the default namespace "/"
.
Implementations§
source§impl RawClient
impl RawClient
sourcepub fn emit<E, D>(&self, event: E, data: D) -> Result<(), Error>where
E: Into<Event>,
D: Into<Payload>,
pub fn emit<E, D>(&self, event: E, data: D) -> Result<(), Error>where E: Into<Event>, D: Into<Payload>,
Sends a message to the server using the underlying engine.io
protocol.
This message takes an event, which could either be one of the common
events like “message” or “error” or a custom event like “foo”. But be
careful, the data string needs to be valid JSON. It’s recommended to use
a library like serde_json
to serialize the data properly.
Example
use rust_socketio::{ClientBuilder, RawClient, Payload};
use serde_json::json;
let mut socket = ClientBuilder::new("http://localhost:4200/")
.on("test", |payload: Payload, socket: RawClient| {
println!("Received: {:#?}", payload);
socket.emit("test", json!({"hello": true})).expect("Server unreachable");
})
.connect()
.expect("connection failed");
let json_payload = json!({"token": 123});
let result = socket.emit("foo", json_payload);
assert!(result.is_ok());
sourcepub fn disconnect(&self) -> Result<(), Error>
pub fn disconnect(&self) -> Result<(), Error>
Disconnects this client from the server by sending a socket.io
closing
packet.
Example
use rust_socketio::{ClientBuilder, Payload, RawClient};
use serde_json::json;
fn handle_test(payload: Payload, socket: RawClient) {
println!("Received: {:#?}", payload);
socket.emit("test", json!({"hello": true})).expect("Server unreachable");
}
let mut socket = ClientBuilder::new("http://localhost:4200/")
.on("test", handle_test)
.connect()
.expect("connection failed");
let json_payload = json!({"token": 123});
socket.emit("foo", json_payload);
// disconnect from the server
socket.disconnect();
sourcepub fn emit_with_ack<F, E, D>(
&self,
event: E,
data: D,
timeout: Duration,
callback: F
) -> Result<(), Error>where
F: FnMut(Payload, RawClient) + 'static + Send,
E: Into<Event>,
D: Into<Payload>,
pub fn emit_with_ack<F, E, D>( &self, event: E, data: D, timeout: Duration, callback: F ) -> Result<(), Error>where F: FnMut(Payload, RawClient) + 'static + Send, E: Into<Event>, D: Into<Payload>,
Sends a message to the server but alloc
s an ack
to check whether the
server responded in a given time span. This message takes an event, which
could either be one of the common events like “message” or “error” or a
custom event like “foo”, as well as a data parameter. But be careful,
in case you send a Payload::String
, the string needs to be valid JSON.
It’s even recommended to use a library like serde_json to serialize the data properly.
It also requires a timeout Duration
in which the client needs to answer.
If the ack is acked in the correct time span, the specified callback is
called. The callback consumes a Payload
which represents the data send
by the server.
Example
use rust_socketio::{ClientBuilder, Payload, RawClient};
use serde_json::json;
use std::time::Duration;
use std::thread::sleep;
let mut socket = ClientBuilder::new("http://localhost:4200/")
.on("foo", |payload: Payload, _| println!("Received: {:#?}", payload))
.connect()
.expect("connection failed");
let ack_callback = |message: Payload, socket: RawClient| {
match message {
Payload::String(str) => println!("{}", str),
Payload::Binary(bytes) => println!("Received bytes: {:#?}", bytes),
}
};
let payload = json!({"token": 123});
socket.emit_with_ack("foo", payload, Duration::from_secs(2), ack_callback).unwrap();
sleep(Duration::from_secs(2));