Skip to content

Commit d17c70e

Browse files
committed
Added PubSub client init success/failure handling and channel messages.
1 parent 0f5ccfb commit d17c70e

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

pubsubman/src/app.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ impl App {
4242
let (back_tx, back_rx) = tokio::sync::mpsc::channel(10);
4343

4444
std::thread::spawn(|| {
45-
Backend::new(back_tx, front_rx, emulator_project_id).init();
45+
if let Ok(mut backend) = Backend::new(back_tx, front_rx, emulator_project_id) {
46+
backend.init();
47+
};
4648
});
4749

4850
refresh_topics(&front_tx, None);
@@ -67,6 +69,7 @@ impl App {
6769
fn handle_backend_message(&mut self) {
6870
match self.back_rx.try_recv() {
6971
Ok(message) => match message {
72+
BackendMessage::ClientInitialised => {}
7073
BackendMessage::TopicsUpdated(topic_names) => {
7174
self.topic_names = topic_names;
7275
refresh_topics(&self.front_tx, Some(5000));

pubsubman_backend/src/lib.rs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::Arc;
1+
use std::{error::Error, sync::Arc};
22

33
use futures_util::StreamExt;
44
use google_cloud_gax::conn::Environment;
@@ -34,20 +34,38 @@ impl Backend {
3434
back_tx: Sender<BackendMessage>,
3535
front_rx: Receiver<FrontendMessage>,
3636
emulator_project_id: Option<String>,
37-
) -> Self {
37+
) -> Result<Self, Box<dyn Error>> {
3838
let rt = Builder::new_multi_thread()
3939
.worker_threads(4)
4040
.enable_all()
4141
.build()
4242
.unwrap();
4343

44-
let client = rt.block_on(async { create_client(emulator_project_id).await });
45-
46-
Self {
47-
back_tx,
48-
front_rx,
49-
client: Arc::new(client),
50-
rt,
44+
match rt.block_on(async { create_client(emulator_project_id).await }) {
45+
Ok(client) => {
46+
let back_tx_clone = back_tx.clone();
47+
rt.spawn(async move {
48+
back_tx_clone
49+
.send(BackendMessage::ClientInitialised)
50+
.await
51+
.unwrap();
52+
});
53+
Ok(Self {
54+
back_tx,
55+
front_rx,
56+
client: Arc::new(client),
57+
rt,
58+
})
59+
}
60+
Err(err) => {
61+
rt.spawn(async move {
62+
back_tx
63+
.send(BackendMessage::Error(BackendError::ClientInitFailed))
64+
.await
65+
.unwrap();
66+
});
67+
Err(err)
68+
}
5169
}
5270
}
5371

@@ -217,14 +235,14 @@ impl Backend {
217235
}
218236
}
219237

220-
async fn create_client(emulator_project_id: Option<String>) -> Client {
221-
let mut config = ClientConfig::default().with_auth().await.unwrap();
238+
async fn create_client(emulator_project_id: Option<String>) -> Result<Client, Box<dyn Error>> {
239+
let mut config = ClientConfig::default().with_auth().await?;
222240

223241
if let (Environment::Emulator(_), Some(emulator_project_id)) =
224242
(&config.environment, emulator_project_id)
225243
{
226244
config.project_id = Some(emulator_project_id);
227245
}
228246

229-
Client::new(config).await.unwrap()
247+
Ok(Client::new(config).await?)
230248
}

pubsubman_backend/src/message.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub enum FrontendMessage {
1313

1414
#[derive(Debug)]
1515
pub enum BackendMessage {
16+
ClientInitialised,
1617
TopicsUpdated(Vec<TopicName>),
1718
SubscriptionCreated(TopicName, SubscriptionName),
1819
MessageReceived(TopicName, PubsubMessage),
@@ -22,6 +23,7 @@ pub enum BackendMessage {
2223

2324
#[derive(Debug)]
2425
pub enum BackendError {
26+
ClientInitFailed,
2527
GetTopicsFailed,
2628
CreateSubscriptionFailed(TopicName),
2729
StreamMessagesFailed(TopicName, SubscriptionName),

0 commit comments

Comments
 (0)