Struct tsclientlib::Connection[][src]

pub struct Connection { /* fields omitted */ }
Expand description

The Connection is the main interaction point with this library.

It represents a connection to a TeamSpeak server. It will reconnect automatically when the connection times out. It will not reconnect which the client is kicked or banned from the server.

Implementations

impl Connection[src]

The main type of this crate, which represents a connection to a server.

After creating a connection with Connection::new, the main way to interact with it is get_state. It stores currently visible clients and channels on the server. The setter methods e.g. for the nickname or channel create a command that can be send to the server. The send method returns a handle which can then be used to check if the action succeeded or not.

The second way of interaction is polling with events(), which returns a stream of StreamItems.

The connection will not do anything unless the event stream is polled. Even sending packets will only happen while polling. Make sure to always wait for events when awaiting other futures.

Examples

This will open a connection to the TeamSpeak server at localhost.

use futures::prelude::*;
use tsclientlib::{Connection, StreamItem};

#[tokio::main]
async fn main() {
    let mut con = Connection::build("localhost").connect().unwrap();
    // Wait until connected
    con.events()
        // We are connected when we receive the first BookEvents
        .try_filter(|e| future::ready(matches!(e, StreamItem::BookEvents(_))))
        .next()
        .await
        .unwrap();
}

pub fn build<A: Into<ServerAddress>>(address: A) -> ConnectOptions[src]

Start creating the configuration of a new connection.

Arguments

The address of the server has to be supplied. The address can be a SocketAddr, a string or directly a ServerAddress. A string will automatically be resolved from all formats supported by TeamSpeak. For details, see resolver::resolve.

Examples

This will open a connection to the TeamSpeak server at localhost.


    let mut con = Connection::build("localhost").connect().unwrap();
    // Wait until connected
    con.events()
        // We are connected when we receive the first BookEvents
        .try_filter(|e| future::ready(matches!(e, StreamItem::BookEvents(_))))
        .next()
        .await
        .unwrap();

pub fn new(options: ConnectOptions) -> Result<Self, Error>[src]

👎 Deprecated since 0.2.0:

ConnectOptions::connect should be used instead

Create a connection

This function opens a new connection to a server. The returned future resolves, when the connection is established successfully.

Settings like nickname of the user can be set using the ConnectOptions parameter.

Examples

This will open a connection to the TeamSpeak server at localhost.


    let mut con = Connection::new(ConnectOptions::new("localhost")).unwrap();
    // Wait until connected
    con.events()
        // We are connected when we receive the first BookEvents
        .try_filter(|e| future::ready(matches!(e, StreamItem::BookEvents(_))))
        .next()
        .await
        .unwrap();

pub fn get_options(&self) -> &ConnectOptions[src]

Get the options which were used to create this connection.

The identity of the options is updated while connecting if the identity level needs to be improved.

pub fn events(&mut self) -> impl Stream<Item = Result<StreamItem, Error>> + '_[src]

Get a stream of events. The event stream needs to be polled, otherwise nothing will happen in a connection, not even sending packets will work.

The returned stream can be dropped and recreated if needed.

pub fn cancel_identity_level_increase(&mut self)[src]

Cancels the computation to increase the identity level.

This function initiates the cancellation and immediately returns. It does not wait until the background thread quits.

Does nothing if the identity level is currently not increased.

pub fn get_tsproto_client(&self) -> Result<&Client, Error>[src]

Get access to the raw connection.

Fails if the connection is currently not connected to the server.

pub fn get_tsproto_client_mut(&mut self) -> Result<&mut Client, Error>[src]

Get access to the raw connection.

Fails if the connection is currently not connected to the server.

pub fn get_server_key(&self) -> Result<EccKeyPubP256, Error>[src]

Returns the public key of the server, fails if disconnected.

pub fn get_state(&self) -> Result<&Connection, Error>[src]

Get the current state of clients and channels of this connection.

Fails if the connection is currently not connected to the server.

pub fn disconnect(&mut self, options: DisconnectOptions) -> Result<(), Error>[src]

Disconnect from the server.

Arguments

  • options: Either None or DisconnectOptions.

Examples

Use default options:


let mut con = Connection::build("localhost").connect().unwrap();
// Wait until connected
con.events()
    // We are connected when we receive the first BookEvents
    .try_filter(|e| future::ready(matches!(e, StreamItem::BookEvents(_))))
    .next()
    .await
    .unwrap();

// Disconnect
con.disconnect(DisconnectOptions::new()).unwrap();
con.events().for_each(|_| future::ready(())).await;

Specify a reason and a quit message:


let mut con = Connection::build("localhost").connect().unwrap();
// Wait until connected
con.events()
    // We are connected when we receive the first BookEvents
    .try_filter(|e| future::ready(matches!(e, StreamItem::BookEvents(_))))
    .next()
    .await
    .unwrap();

// Disconnect
let options = DisconnectOptions::new()
    .reason(Reason::Clientdisconnect)
    .message("Away for a while");
con.disconnect(options).unwrap();
con.events().for_each(|_| future::ready(())).await;

pub fn send_audio(&mut self, packet: OutPacket) -> Result<(), Error>[src]

Send audio to the server.

This function does only accept Voice and VoiceWhisper packets. Commands should be send with command.send(&mut connection) or command.send_with_result(&mut connection).

Examples

use tsproto_packets::packets::{AudioData, CodecType, OutAudio};
let codec = CodecType::OpusVoice;
// Send an empty packet to signal audio end
let packet = OutAudio::new(&AudioData::C2S { id: 0, codec, data: &[] });
con.send_audio(packet).unwrap();

pub fn download_file(
    &mut self,
    channel_id: ChannelId,
    path: &str,
    channel_password: Option<&str>,
    seek_position: Option<u64>
) -> Result<FiletransferHandle, Error>
[src]

Download a file from a channel of the connected TeamSpeak server.

Returns the size of the file and a tcp stream of the requested file.

Examples

Download an icon.

let handle_future = con.download_file(ChannelId(0), &format!("/icon_{}", id), None, None);

pub fn upload_file(
    &mut self,
    channel_id: ChannelId,
    path: &str,
    channel_password: Option<&str>,
    size: u64,
    overwrite: bool,
    resume: bool
) -> Result<FiletransferHandle, Error>
[src]

Upload a file to a channel of the connected TeamSpeak server.

Returns the size of the part which is already uploaded (when resume is specified) and a tcp stream where the requested file should be uploaded.

Examples

Upload an avatar.

let handle_future = con.upload_file(ChannelId(0), "/avatar", None, size, true, false);

pub fn get_network_stats(&self) -> Result<&ConnectionStats, Error>[src]

Get statistics about the network connection.

Example

Get the fraction of packets that are currently lost.

let loss: f32 = con.get_network_stats().unwrap().get_packetloss();

Error

Returns an error if currently not connected.

pub fn can_send_audio(&self) -> bool[src]

If this client can send audio or is muted.

If the client is muted, the server will drop any sent audio packets. A client counts as muted if input or output is muted, he is marked away or the talk power is less than the needed talk power in the current channel. Temporary disconnects also count as mutes.

If this changes, the AudioEvent::CanSendAudio event is emitted.

pub fn can_receive_audio(&self) -> bool[src]

If this client can receive audio or the output is muted.

This will return false if the client is currently not connected to the server. Audio packets might still be received but should not be played.

If this changes, the AudioEvent::CanReceiveAudio event is emitted.

Trait Implementations

impl Drop for Connection[src]

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

impl From<Connection> for SyncConnection[src]

fn from(con: Connection) -> Self[src]

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> Conv for T

fn conv<T>(self) -> T where
    Self: Into<T>, 

Converts self into T using Into<T>. Read more

impl<T> Conv for T

fn conv<T>(self) -> T where
    Self: Into<T>, 

Converts self into a target type. Read more

impl<T> FmtForward for T

fn fmt_binary(self) -> FmtBinary<Self> where
    Self: Binary

Causes self to use its Binary implementation when Debug-formatted.

fn fmt_display(self) -> FmtDisplay<Self> where
    Self: Display

Causes self to use its Display implementation when Debug-formatted. Read more

fn fmt_lower_exp(self) -> FmtLowerExp<Self> where
    Self: LowerExp

Causes self to use its LowerExp implementation when Debug-formatted. Read more

fn fmt_lower_hex(self) -> FmtLowerHex<Self> where
    Self: LowerHex

Causes self to use its LowerHex implementation when Debug-formatted. Read more

fn fmt_octal(self) -> FmtOctal<Self> where
    Self: Octal

Causes self to use its Octal implementation when Debug-formatted.

fn fmt_pointer(self) -> FmtPointer<Self> where
    Self: Pointer

Causes self to use its Pointer implementation when Debug-formatted. Read more

fn fmt_upper_exp(self) -> FmtUpperExp<Self> where
    Self: UpperExp

Causes self to use its UpperExp implementation when Debug-formatted. Read more

fn fmt_upper_hex(self) -> FmtUpperHex<Self> where
    Self: UpperHex

Causes self to use its UpperHex implementation when Debug-formatted. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T> Instrument for T[src]

fn instrument(self, span: Span) -> Instrumented<Self>[src]

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

fn in_current_span(self) -> Instrumented<Self>[src]

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> Pipe for T where
    T: ?Sized

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R

Pipes by value. This is generally the method you want to use. Read more

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
    R: 'a, 

Borrows self and passes that borrow into the pipe function. Read more

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R where
    R: 'a, 

Mutably borrows self and passes that borrow into the pipe function. Read more

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R where
    Self: Borrow<B>,
    B: 'a + ?Sized,
    R: 'a, 

Borrows self, then passes self.borrow() into the pipe function. Read more

fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R
) -> R where
    Self: BorrowMut<B>,
    B: 'a + ?Sized,
    R: 'a, 

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R where
    Self: AsRef<U>,
    U: 'a + ?Sized,
    R: 'a, 

Borrows self, then passes self.as_ref() into the pipe function.

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R where
    Self: AsMut<U>,
    U: 'a + ?Sized,
    R: 'a, 

Mutably borrows self, then passes self.as_mut() into the pipe function. Read more

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: Deref<Target = T>,
    T: 'a + ?Sized,
    R: 'a, 

Borrows self, then passes self.deref() into the pipe function.

fn pipe_deref_mut<'a, T, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut T) -> R
) -> R where
    Self: DerefMut<Target = T> + Deref,
    T: 'a + ?Sized,
    R: 'a, 

Mutably borrows self, then passes self.deref_mut() into the pipe function. Read more

impl<T> Pipe for T

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R

Pipes a value into a function that cannot ordinarily be called in suffix position. Read more

impl<T> PipeAsRef for T

fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: AsRef<T>,
    T: 'a,
    R: 'a, 

Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more

fn pipe_as_mut<'a, T, R>(&'a mut self, func: impl FnOnce(&'a mut T) -> R) -> R where
    Self: AsMut<T>,
    T: 'a,
    R: 'a, 

Pipes a trait mutable borrow into a function that cannot normally be called in suffix position. Read more

impl<T> PipeBorrow for T

fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: Borrow<T>,
    T: 'a,
    R: 'a, 

Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more

fn pipe_borrow_mut<'a, T, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut T) -> R
) -> R where
    Self: BorrowMut<T>,
    T: 'a,
    R: 'a, 

Pipes a trait mutable borrow into a function that cannot normally be called in suffix position. Read more

impl<T> PipeDeref for T

fn pipe_deref<'a, R>(&'a self, func: impl FnOnce(&'a Self::Target) -> R) -> R where
    Self: Deref,
    R: 'a, 

Pipes a dereference into a function that cannot normally be called in suffix position. Read more

fn pipe_deref_mut<'a, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut Self::Target) -> R
) -> R where
    Self: DerefMut,
    R: 'a, 

Pipes a mutable dereference into a function that cannot normally be called in suffix position. Read more

impl<T> PipeRef for T

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
    R: 'a, 

Pipes a reference into a function that cannot ordinarily be called in suffix position. Read more

fn pipe_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R where
    R: 'a, 

Pipes a mutable reference into a function that cannot ordinarily be called in suffix position. Read more

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> Tap for T

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self where
    Self: Borrow<B>,
    B: ?Sized

Immutable access to the Borrow<B> of a value. Read more

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self where
    Self: BorrowMut<B>,
    B: ?Sized

Mutable access to the BorrowMut<B> of a value. Read more

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self where
    Self: AsRef<R>,
    R: ?Sized

Immutable access to the AsRef<R> view of a value. Read more

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self where
    Self: AsMut<R>,
    R: ?Sized

Mutable access to the AsMut<R> view of a value. Read more

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self where
    Self: Deref<Target = T>,
    T: ?Sized

Immutable access to the Deref::Target of a value. Read more

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self where
    Self: DerefMut<Target = T> + Deref,
    T: ?Sized

Mutable access to the Deref::Target of a value. Read more

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds. Read more

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self where
    Self: Borrow<B>,
    B: ?Sized

Calls .tap_borrow() only in debug builds, and is erased in release builds. Read more

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self where
    Self: BorrowMut<B>,
    B: ?Sized

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds. Read more

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self where
    Self: AsRef<R>,
    R: ?Sized

Calls .tap_ref() only in debug builds, and is erased in release builds. Read more

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self where
    Self: AsMut<R>,
    R: ?Sized

Calls .tap_ref_mut() only in debug builds, and is erased in release builds. Read more

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self where
    Self: Deref<Target = T>,
    T: ?Sized

Calls .tap_deref() only in debug builds, and is erased in release builds. Read more

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self where
    Self: DerefMut<Target = T> + Deref,
    T: ?Sized

Calls .tap_deref_mut() only in debug builds, and is erased in release builds. Read more

impl<T> Tap for T

fn tap<F, R>(self, func: F) -> Self where
    F: FnOnce(&Self) -> R, 

Provides immutable access for inspection. Read more

fn tap_dbg<F, R>(self, func: F) -> Self where
    F: FnOnce(&Self) -> R, 

Calls tap in debug builds, and does nothing in release builds.

fn tap_mut<F, R>(self, func: F) -> Self where
    F: FnOnce(&mut Self) -> R, 

Provides mutable access for modification. Read more

fn tap_mut_dbg<F, R>(self, func: F) -> Self where
    F: FnOnce(&mut Self) -> R, 

Calls tap_mut in debug builds, and does nothing in release builds.

impl<T, U> TapAsRef<U> for T where
    U: ?Sized

fn tap_ref<F, R>(self, func: F) -> Self where
    Self: AsRef<T>,
    F: FnOnce(&T) -> R, 

Provides immutable access to the reference for inspection.

fn tap_ref_dbg<F, R>(self, func: F) -> Self where
    Self: AsRef<T>,
    F: FnOnce(&T) -> R, 

Calls tap_ref in debug builds, and does nothing in release builds.

fn tap_ref_mut<F, R>(self, func: F) -> Self where
    Self: AsMut<T>,
    F: FnOnce(&mut T) -> R, 

Provides mutable access to the reference for modification.

fn tap_ref_mut_dbg<F, R>(self, func: F) -> Self where
    Self: AsMut<T>,
    F: FnOnce(&mut T) -> R, 

Calls tap_ref_mut in debug builds, and does nothing in release builds.

impl<T, U> TapBorrow<U> for T where
    U: ?Sized

fn tap_borrow<F, R>(self, func: F) -> Self where
    Self: Borrow<T>,
    F: FnOnce(&T) -> R, 

Provides immutable access to the borrow for inspection. Read more

fn tap_borrow_dbg<F, R>(self, func: F) -> Self where
    Self: Borrow<T>,
    F: FnOnce(&T) -> R, 

Calls tap_borrow in debug builds, and does nothing in release builds.

fn tap_borrow_mut<F, R>(self, func: F) -> Self where
    Self: BorrowMut<T>,
    F: FnOnce(&mut T) -> R, 

Provides mutable access to the borrow for modification.

fn tap_borrow_mut_dbg<F, R>(self, func: F) -> Self where
    Self: BorrowMut<T>,
    F: FnOnce(&mut T) -> R, 

Calls tap_borrow_mut in debug builds, and does nothing in release builds. Read more

impl<T> TapDeref for T

fn tap_deref<F, R>(self, func: F) -> Self where
    Self: Deref,
    F: FnOnce(&Self::Target) -> R, 

Immutably dereferences self for inspection.

fn tap_deref_dbg<F, R>(self, func: F) -> Self where
    Self: Deref,
    F: FnOnce(&Self::Target) -> R, 

Calls tap_deref in debug builds, and does nothing in release builds.

fn tap_deref_mut<F, R>(self, func: F) -> Self where
    Self: DerefMut,
    F: FnOnce(&mut Self::Target) -> R, 

Mutably dereferences self for modification.

fn tap_deref_mut_dbg<F, R>(self, func: F) -> Self where
    Self: DerefMut,
    F: FnOnce(&mut Self::Target) -> R, 

Calls tap_deref_mut in debug builds, and does nothing in release builds. Read more

impl<T> TryConv for T

fn try_conv<T>(self) -> Result<T, Self::Error> where
    Self: TryInto<T>, 

Attempts to convert self into T using TryInto<T>. Read more

impl<T> TryConv for T

fn try_conv<T>(self) -> Result<T, Self::Error> where
    Self: TryInto<T>, 

Attempts to convert self into a target type. Read more

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

pub fn vzip(self) -> V