pub struct Connection { /* private fields */ }
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§
Source§impl Connection
The main type of this crate, which represents a connection to a server.
impl Connection
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 StreamItem
s.
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();
}
Sourcepub fn build<A: Into<ServerAddress>>(address: A) -> ConnectOptions
pub fn build<A: Into<ServerAddress>>(address: A) -> ConnectOptions
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();
Sourcepub fn new(options: ConnectOptions) -> Result<Self, Error>
👎Deprecated since 0.2.0: ConnectOptions::connect should be used instead
pub fn new(options: ConnectOptions) -> Result<Self, Error>
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();
Sourcepub fn get_options(&self) -> &ConnectOptions
pub fn get_options(&self) -> &ConnectOptions
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.
Sourcepub fn events(&mut self) -> impl Stream<Item = Result<StreamItem, Error>> + '_
pub fn events(&mut self) -> impl Stream<Item = Result<StreamItem, Error>> + '_
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.
Sourcepub fn cancel_identity_level_increase(&mut self)
pub fn cancel_identity_level_increase(&mut self)
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.
Sourcepub fn get_tsproto_client(&self) -> Result<&Client, Error>
pub fn get_tsproto_client(&self) -> Result<&Client, Error>
Get access to the raw connection.
Fails if the connection is currently not connected to the server.
Sourcepub fn get_tsproto_client_mut(&mut self) -> Result<&mut Client, Error>
pub fn get_tsproto_client_mut(&mut self) -> Result<&mut Client, Error>
Get access to the raw connection.
Fails if the connection is currently not connected to the server.
Sourcepub fn get_server_key(&self) -> Result<EccKeyPubP256, Error>
pub fn get_server_key(&self) -> Result<EccKeyPubP256, Error>
Returns the public key of the server, fails if disconnected.
Sourcepub fn get_state(&self) -> Result<&Connection, Error>
pub fn get_state(&self) -> Result<&Connection, Error>
Get the current state of clients and channels of this connection.
Fails if the connection is currently not connected to the server.
Sourcepub fn disconnect(&mut self, options: DisconnectOptions) -> Result<(), Error>
pub fn disconnect(&mut self, options: DisconnectOptions) -> Result<(), Error>
Disconnect from the server.
§Arguments
options
: EitherNone
orDisconnectOptions
.
§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;
Sourcepub fn send_audio(&mut self, packet: OutPacket) -> Result<(), Error>
pub fn send_audio(&mut self, packet: OutPacket) -> Result<(), Error>
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();
Sourcepub fn download_file(
&mut self,
channel_id: ChannelId,
path: &str,
channel_password: Option<&str>,
seek_position: Option<u64>,
) -> Result<FiletransferHandle, Error>
pub fn download_file( &mut self, channel_id: ChannelId, path: &str, channel_password: Option<&str>, seek_position: Option<u64>, ) -> Result<FiletransferHandle, Error>
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);
Sourcepub fn upload_file(
&mut self,
channel_id: ChannelId,
path: &str,
channel_password: Option<&str>,
size: u64,
overwrite: bool,
resume: bool,
) -> Result<FiletransferHandle, Error>
pub fn upload_file( &mut self, channel_id: ChannelId, path: &str, channel_password: Option<&str>, size: u64, overwrite: bool, resume: bool, ) -> Result<FiletransferHandle, Error>
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);
Sourcepub fn get_network_stats(&self) -> Result<&ConnectionStats, Error>
pub fn get_network_stats(&self) -> Result<&ConnectionStats, Error>
Sourcepub fn can_send_audio(&self) -> bool
pub fn can_send_audio(&self) -> bool
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.
Sourcepub fn can_receive_audio(&self) -> bool
pub fn can_receive_audio(&self) -> bool
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§
Source§impl Drop for Connection
impl Drop for Connection
Source§impl From<Connection> for SyncConnection
impl From<Connection> for SyncConnection
Source§fn from(con: Connection) -> Self
fn from(con: Connection) -> Self
Auto Trait Implementations§
impl Freeze for Connection
impl !RefUnwindSafe for Connection
impl Send for Connection
impl !Sync for Connection
impl Unpin for Connection
impl !UnwindSafe for Connection
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> PipeAsRef for T
impl<T> PipeAsRef for T
Source§impl<T> PipeBorrow for T
impl<T> PipeBorrow for T
Source§impl<T> PipeDeref for T
impl<T> PipeDeref for T
Source§impl<T> PipeRef for T
impl<T> PipeRef for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
Source§fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
tap
in debug builds, and does nothing in release builds.Source§fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
Source§fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
tap_mut
in debug builds, and does nothing in release builds.Source§impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
Source§fn tap_ref<F, R>(self, func: F) -> Self
fn tap_ref<F, R>(self, func: F) -> Self
Source§fn tap_ref_dbg<F, R>(self, func: F) -> Self
fn tap_ref_dbg<F, R>(self, func: F) -> Self
tap_ref
in debug builds, and does nothing in release builds.Source§fn tap_ref_mut<F, R>(self, func: F) -> Self
fn tap_ref_mut<F, R>(self, func: F) -> Self
Source§impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
Source§fn tap_borrow<F, R>(self, func: F) -> Self
fn tap_borrow<F, R>(self, func: F) -> Self
Source§fn tap_borrow_dbg<F, R>(self, func: F) -> Self
fn tap_borrow_dbg<F, R>(self, func: F) -> Self
tap_borrow
in debug builds, and does nothing in release builds.Source§fn tap_borrow_mut<F, R>(self, func: F) -> Self
fn tap_borrow_mut<F, R>(self, func: F) -> Self
Source§impl<T> TapDeref for T
impl<T> TapDeref for T
Source§fn tap_deref_dbg<F, R>(self, func: F) -> Self
fn tap_deref_dbg<F, R>(self, func: F) -> Self
tap_deref
in debug builds, and does nothing in release builds.Source§fn tap_deref_mut<F, R>(self, func: F) -> Self
fn tap_deref_mut<F, R>(self, func: F) -> Self
self
for modification.