* adding user update support * Adding public key storage * replaced duplicate fields * changed messaegs to include a type property * added encryption example * Moved threads to tokio async * Moved threads to tokio async * Created global message support * created basic ui that counts * Created connection abstraction This abstracts a TcpStream await to use any serialisable types. * exposed server as lib +created lib output for server + added extra dependencies + added functions to retrieve the port of a server * updated connection + added manager trait + updated connection to use more idomatic rust code converted enums to Strigns rather that &str + * added network Manager tl;dr, as the title says * Update network_manager.rs Converted over to new messaging system. * meant to add this earlier * Right bare with me... This doesnt work for now but i have a system that works. After this commit i will be resuming the smaller changes. I needed to do this to find a new approach. God save my mind. * Impl IManager for ClientManager * Added client manager tests * Stripped server of functinoality This is temporary whilst the client manager is being tested. * Update client_manager.rs swapped lock type for tokio lock * Update client_manager.rs - Added type arguments to Client manager - deprecated start method * Update client_manager.rs - implemented handle channel method from old start method. - added notes to possible issues. * Update client_manager.rs + updated lifetime bounds. * Update client_manager.rs + created function to get the number of connected clients * Update client_manager.rs + created function to add/remove clients to the client manager. * Update server.rs - refactored server to simplify message passing * Update client.rs meant to add this earlier * Update messages.rs formatting * moved some messages around * Update server.rs - removed redundant messages * Update client_manager.rs bunch more changes yes i know i'm rubbish at this plz don't say anything :( * Added Message Broadcasting functionality * cleared up warnings * Update client.rs - removed redundant fields * Update client.rs added global broadcasting * Added the ability to disconnect from the server * Update network_manager.rs this protects the network manager from crashing when a erroneous message is sent * implemented message sending between users * Update client.rs added tokio, to protect client connections. * Added Lua dependency * Made server, Lua scriptable. * added basic scripting abilities to the server * Update client.rs fixed stray connection * made client Lua scriptable * Made client manager Lua scriptable * Adde fields to server to get client manager * Updated testing script * added client indexing to client manager * added basic callback support to ClientManager * moved Lua structs to separate module * added arbitrary self types * Created example plugin crate * Added libloading dependency * Created plugin trait and create function type * created basic PluginManager * Added plugin manager to server * added modules * Updated example plugin * added plugin manager to server * modified plugin module visibility * updated example plugin * updated plagin interface * created plugin interface * updated plugin init process * updated example plugin * cleaned up lib folder * fixed cloning issues with plugin manager * updated plugin trait implementation * updated module definitions * upadted rust fmt rules for imports * fixoing formatting and ther errors. This is a pain to look through. i'm sorry :( * minor fix * Fixed plugin not functioning with tokio * Added plugin lifecycle events added lifecycle events to the plugin entry. This allows plugins to be in a stopped paused or running state * Adjusted visibility modifiers * added basics of an event system * updated imports. * added function to get plugin entry as interface to plugin * updated plugin example * fixing linting errors * updated event architecture * renamed responder module * added documention * created a event result builder * renamed responder * updated example with interface setting * moved event system to foundation * added back tokio to foundation * modified visibility * added functions for IResponder * more module mess * made event generic * made responder generic * added basic plugin event propogation. * updated plugin event handler. * same because vscode? * made plugin event generic * RIGHT I'M MOVING TO ACTIX * Started work on actor conversion * implemented GetInfo for actix server * implementing clients using actors * added ability to add and remove clients * updated foundation with comments and better messages * Update Cargo.toml + added tokio stream * added auto connection closing to Connection * Update actix_server.rs + added ClientConnection handlers * added ability to get server updates * added basic messaging functonality * deleted old server version * renamed files to match std structure * reformatted project * renamed old files * renamed serverActor to server * added proper prelude * Update client.rs minor bug fixes * updated clap * made server configurable * added port configurability ~ moved components to seperate modules ~ added builder and config to network manager * way too much happened here + added scriptable version of the server, networkManager and clientManager + added lua engine creation +also added unfinished rhai support + also did some restructuring * made client manager and clients scriptable * added more scriptable objects * Created config manager with path read functionality * fixed network manager message result types * added bootstrapper actor * moved arg matcher funtion. * created singleton config manager using once pattern. * removed bootstrapper and created config builder * fixed panic on file not existing * ignoring config_file * added config manager to network manager * updated some docs * added config support to network manager, changed lifecycle a bit as well * removed redundant handlers * added configuration through args support to config manager and network manager. * added config manager support to server and removed old serverConfig references * performed cleanup of network manager * performed cleanup of server * updated config manager api to use optionals. This leads to pre-configuration and easier readability and understanding. * updated server and network manager to new style for setting config values * cleaned up prelude linting errors * cleaned up network listener * cleaned up connection initator * cleaned up connection actor * cleaned up lua manager * cleaned up rhai manager * cleaned up config manager * cleaned up client manager * cleaned up client actor * cleaned up scriptable interfaces * updated client uuid version * fixed client cargo toml * undone previous change * moved arg parser to folder as file * uhh... changes and formatting * created chat manager and added it to the client manager * added global message spport to client manager * refixed network manager (again again) * added debug messages * refactord client code * refactored messages and added new message types * refactord network manager module name * resolved warning in connection * refactored message into foundation, added get message support for clients * Fixed messages being sent to sender * fixed not implemented panic, and field misnaming * turned some references into weak variaties, to prevent memory leaks. * turned ref into weak ref * removing strong references from scriping managers * fixing lints * making moe things weak repferences * refactored connection initiator into spereate files * accedentally ran cargo fmt instead of on one file * removed the read loop, and replaced it with a recurrent messages. * added docker files and automated build scripts * Added client updates for addition and removal of clients |
||
|---|---|---|
| .github/workflows | ||
| client | ||
| example_plugin | ||
| foundation | ||
| scripts | ||
| server | ||
| serverctl | ||
| .dockerignore | ||
| .gitignore | ||
| Cargo.toml | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
| rustfmt.toml | ||
README.md
Rust-chat-server
A Chat server writen in rust to allow communication between peers.
Features:
- implemented:
- json based API.
- Server introspection.
- Peer discovery.
- sending messages to connected clients.
- todo:
- Encryption to server.
- server to server meshing.
- asynchronous client managment instead of threaded approach.
Goals:
- Learn the rust programming lanaguage.
- Ownership: how that affects normal programming styles.
- Borrowing and references: how this affects shared state.
- Lifetimes: how this affects data retention and sharing.
- Learn how to create networked programs.
- Application level protocol: how to get two programs to communicate via TCP sockets.
- Socket handling: Discovering ways to handle multiple socket connections without affecting performance.
- Learn common encryption protocols.
- Adding support for encrypted sockets.
- Pros and cons of symetric and asymetric encryption.
- resolving common encryption flaws
Questions: For questions please add a issue with the question label. It will eventually be responded to