https://github.com/sevenproxy/yggdrasil
IRC
https://github.com/sevenproxy/yggdrasil
irc irc-server rust
Last synced: 8 months ago
JSON representation
IRC
- Host: GitHub
- URL: https://github.com/sevenproxy/yggdrasil
- Owner: SevenProxy
- Created: 2025-03-13T21:15:18.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-21T03:58:41.000Z (about 1 year ago)
- Last Synced: 2025-06-14T23:43:39.325Z (12 months ago)
- Topics: irc, irc-server, rust
- Language: Rust
- Homepage:
- Size: 13.7 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Contexto
**O `servidor IRC` é software que utiliza o protocolo `TCP`, para receber e enviar dados para a conexão estabelecida.**
O Projeto utiliza o modulo/lib [tokio](https://tokio.rs/) para iniciar essa conexão.
No arquivo `main.rs`, temos a conexão sendo iniciada:
`/main.rs`
```rs
pub use tokio::net::{TcpListener, TcpStream}; // Essa chamada do modulos já ocorre dentro de `lib.rs`, isso é apenas uma demostração.
use irc_server::{Handler, Mutex, ServerError, TcpListener};
#[tokio::main]
async fn main() -> Result<(), ServerError> {
let listener: TcpStream = TcpListener::bind("127.0.0.1:6667").await?;
// Precisamos deixa-la em loop, para receber multiplas conexões.
loop {
// Aqui usamos o metodo accept para receber uma conexão. Veja que socket passa a ser a conexão vinda do client.
let (socket: TcpStream, _) = listener.accept().await?;
// Em seguida, para evitar erros de multiplas conexões, ou sobrescrever conexões existentes, usamos o Mutext da lib/modulo Tokio.
//
// Com isso, garantimos que a conexão estabelecida não seja alterada ou sobescrita, deixando-as com um fluxo de controle melhor, pois assim teremos um controle de conexão único para cada client conectado.
let socket = Arc::new(Mutex::new(socket));
}
}
```