Feature/wasm client compilation fixes (#501)

* Gateway client wasm-specific fixes

* wasm-client adjustments
This commit is contained in:
Jędrzej Stuczyński
2021-01-29 10:13:22 +00:00
committed by GitHub
parent 12faa23222
commit 86c9ab2ef5
2 changed files with 41 additions and 12 deletions
+4 -3
View File
@@ -67,8 +67,8 @@ impl NymClient {
pub fn new(validator_server: String) -> Self {
let mut rng = OsRng;
// for time being generate new keys each time...
let identity = identity::KeyPair::new_with_rng(&mut rng);
let encryption_keys = encryption::KeyPair::new_with_rng(&mut rng);
let identity = identity::KeyPair::new(&mut rng);
let encryption_keys = encryption::KeyPair::new(&mut rng);
let ack_key = AckKey::new(&mut rng);
Self {
@@ -143,8 +143,9 @@ impl NymClient {
None => console_log!("Gateway connection established - no callback specified"),
};
let rng = rand::rngs::OsRng;
let message_preparer = MessagePreparer::new(
&mut rand::rngs::OsRng,
rng,
client.self_recipient(),
DEFAULT_AVERAGE_PACKET_DELAY,
DEFAULT_AVERAGE_ACK_DELAY,
@@ -136,15 +136,20 @@ impl GatewayClient {
self.gateway_identity
}
pub async fn close_connection(&mut self) -> Result<(), GatewayClientError> {
if self.connection.is_partially_delegated() {
self.recover_socket_connection().await?;
}
#[cfg(not(target_arch = "wasm32"))]
async fn _close_connection(&mut self) -> Result<(), GatewayClientError> {
match std::mem::replace(&mut self.connection, SocketState::NotConnected) {
#[cfg(not(target_arch = "wasm32"))]
SocketState::Available(mut socket) => Ok(socket.close(None).await?),
#[cfg(target_arch = "wasm32")]
SocketState::PartiallyDelegated(_) => {
unreachable!("this branch should have never been reached!")
}
_ => Ok(()), // no need to do anything in those cases
}
}
#[cfg(target_arch = "wasm32")]
async fn _close_connection(&mut self) -> Result<(), GatewayClientError> {
match std::mem::replace(&mut self.connection, SocketState::NotConnected) {
SocketState::Available(mut socket) => Ok(socket.close(None).await),
SocketState::PartiallyDelegated(_) => {
unreachable!("this branch should have never been reached!")
@@ -153,14 +158,27 @@ impl GatewayClient {
}
}
pub async fn close_connection(&mut self) -> Result<(), GatewayClientError> {
if self.connection.is_partially_delegated() {
self.recover_socket_connection().await?;
}
self._close_connection().await
}
#[cfg(not(target_arch = "wasm32"))]
pub async fn establish_connection(&mut self) -> Result<(), GatewayClientError> {
#[cfg(not(target_arch = "wasm32"))]
let ws_stream = match connect_async(&self.gateway_address).await {
Ok((ws_stream, _)) => ws_stream,
Err(e) => return Err(GatewayClientError::NetworkError(e)),
};
#[cfg(target_arch = "wasm32")]
self.connection = SocketState::Available(ws_stream);
Ok(())
}
#[cfg(target_arch = "wasm32")]
pub async fn establish_connection(&mut self) -> Result<(), GatewayClientError> {
let ws_stream = match JSWebsocket::new(&self.gateway_address) {
Ok(ws_stream) => ws_stream,
Err(e) => return Err(GatewayClientError::NetworkErrorWasm(e)),
@@ -183,7 +201,17 @@ impl GatewayClient {
info!("managed to reconnect!");
return Ok(());
}
#[cfg(not(target_arch = "wasm32"))]
tokio::time::delay_for(self.reconnection_backoff).await;
#[cfg(target_arch = "wasm32")]
if let Err(err) = wasm_timer::Delay::new(self.reconnection_backoff).await {
error!(
"the timer has gone away while in reconnection backoff! - {}",
err
);
}
}
// final attempt (done separately to be able to return a proper error)