mirror of
https://github.com/hexedtech/codemp-vscode.git
synced 2024-11-22 15:34:49 +01:00
feat: reworked operation matching with enum
Co-authored-by: f-tlm <f-tlm@users.noreply.github.com>
This commit is contained in:
parent
934917ffa2
commit
773a90b94f
1 changed files with 41 additions and 12 deletions
|
@ -1,40 +1,69 @@
|
||||||
pub mod proto_core {
|
pub mod proto_core {
|
||||||
tonic::include_proto!("core");
|
tonic::include_proto!("session");
|
||||||
}
|
}
|
||||||
|
|
||||||
use tonic::transport::Channel;
|
use tonic::transport::Channel;
|
||||||
|
|
||||||
use proto_core::session_client::SessionClient;
|
use proto_core::workspace_client::WorkspaceClient;
|
||||||
use proto_core::SessionRequest;
|
use proto_core::SessionRequest;
|
||||||
|
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::{mpsc, oneshot};
|
||||||
|
|
||||||
|
use self::proto_core::SessionResponse;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum Command {
|
||||||
|
CreateSession {
|
||||||
|
key: String,
|
||||||
|
resp: oneshot::Sender<SessionResponse>,
|
||||||
|
},
|
||||||
|
JoinSession {
|
||||||
|
key: String,
|
||||||
|
resp: oneshot::Sender<SessionResponse>,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Command {
|
||||||
|
pub fn create_session_cmd(key: String) -> (Command, oneshot::Receiver<SessionResponse>) {
|
||||||
|
let (resp, x) = oneshot::channel();
|
||||||
|
( Command::CreateSession { key, resp }, x )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ConnectionManager {
|
pub struct ConnectionManager {
|
||||||
client: SessionClient<Channel>,
|
client: WorkspaceClient<Channel>,
|
||||||
rx: mpsc::Receiver<i32>
|
rx: mpsc::Receiver<Command>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl ConnectionManager {
|
impl ConnectionManager {
|
||||||
pub async fn new(addr:String, outbound:mpsc::Receiver<i32>) -> Result<Self, Box<dyn std::error::Error>> {
|
pub async fn new(addr:String, outbound:mpsc::Receiver<Command>) -> Result<Self, Box<dyn std::error::Error>> {
|
||||||
Ok(ConnectionManager {
|
Ok(ConnectionManager {
|
||||||
client: SessionClient::connect(addr).await?,
|
client: WorkspaceClient::connect(addr).await?,
|
||||||
rx: outbound
|
rx: outbound
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn process_packets(&mut self) {
|
pub async fn process_packets(&mut self) {
|
||||||
{
|
{
|
||||||
let request = tonic::Request::new(SessionRequest {session_id: -1});
|
let request = tonic::Request::new(SessionRequest {
|
||||||
|
session_id: -1,
|
||||||
|
session_key: "INIT".to_string(),
|
||||||
|
});
|
||||||
let response = self.client.create(request).await.unwrap();
|
let response = self.client.create(request).await.unwrap();
|
||||||
eprintln!("RESPONSE={:?}", response);
|
eprintln!("RESPONSE={:?}", response);
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
if let Some(i) = self.rx.recv().await {
|
if let Some(cmd) = self.rx.recv().await {
|
||||||
let request = tonic::Request::new(SessionRequest {session_id: i});
|
match cmd {
|
||||||
let response = self.client.create(request).await.unwrap();
|
Command::CreateSession { key, resp } => {
|
||||||
eprintln!("RESPONSE={:?}", response);
|
let request = tonic::Request::new(SessionRequest {session_id: 1, session_key: key});
|
||||||
|
let response = self.client.create(request).await.unwrap();
|
||||||
|
resp.send(response.into_inner()).unwrap();
|
||||||
|
},
|
||||||
|
_ => eprintln!("[!] Received unexpected command")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue