# Tesses.RPC A Simple RPC Library for my WebServer # License ![GPL3-only](https://www.gnu.org/graphics/gplv3-with-text-136x68.png) Licensed under [GPL3](https://www.gnu.org/licenses/) # How to use (client) Install [this](https://nuget.org/packages/Tesses.RPCClient) nuget package if you are not using blazor wasm or if you are use [this package](https://nuget.org/packages/Tesses.SystemNetWebSocketsRPC) ```csharp using Tesses.RPC; public interface IMessage { } public enum MessageType { Text, Number } public class TextMessage : IMessage { public string Text {get;set;} } public class NumberMessage : IMessage { public int Number {get;set;} } public class Program { public static void Main(string[] args) { JsonMessager? messager=null; var msghndlr=new WebSocketClientMessageHandler ( "ws://localhost:4222", ()=>{ //do something when connection starts such as send messages or registering callbacks if(messager!= null) { TextMessage messageToSend = new TextMessage(); messageToSend.Text="Demi Lovato"; messager.SendMessage(messageToSend); //or if you want to receive a response messager.SendMessage( messageToSend, (msg)=>{ TextMessage receivedMessage=msg; //do something with message } ); } } ); messager = new JsonMessager(msghndlr); messager.Register( MessageType.Text, (msg)=>{ TextMessage receivedMessage=msg.Data; if(msg.NeedReply) { TextMessage replyMessage=new TextMessage(); replyMessage.Text = "Something"; //send message to server //you can send original message if you want msg.Reply(replyMessage); } } ); messager.Register( MessageType.Number, (msg)=>{ NumberMessage receivedMessage=msg.Data; if(msg.NeedReply) //true if server sends message with messager.SendMessage(variable,(res)=>{}); { NumberMessage replyMessage=new NumberMessage(); replyMessage.Text = 42; //send message to server //you can send original message if you want msg.Reply(replyMessage); } } ); messager.Connect(); } } ``` # How to use (server) Install [this](https://nuget.org/packages/Tesses.WebServer.WebSocketRPC) nuget package (and [this one](https://nuget.org/packages/Tesses.WebServer.EasyServer)) ```csharp using Tesses.RPC; using Tesses.WebServer; public interface IMessage { } public enum MessageType { Text, Number } public class TextMessage : IMessage { public string Text {get;set;} } public class NumberMessage : IMessage { public int Number {get;set;} } public class Program { public static void Main(string[] args) { RouteServer svr=new RouteServer(); svr.Add( "/", async (e)=>{ RPCServer ews=new RPCServer( (mhandler)=>{ JsonMessager messager=new JsonMessager(mhandler); messager.Register( MessageType.Text, (msg)=>{ TextMessage receivedMessage=msg.Data; if(msg.NeedReply) { TextMessage replyMessage=new TextMessage(); replyMessage.Text = "Something"; //send message to client //you can send original message if you want msg.Reply(replyMessage); } } ); messager.Register( MessageType.Number, (msg)=>{ NumberMessage receivedMessage=msg.Data; if(msg.NeedReply) //true if client sends message with messager.SendMessage(variable,(res)=>{}); { NumberMessage replyMessage=new NumberMessage(); replyMessage.Text = 42; //send message to client //you can send original message if you want msg.Reply(replyMessage); } } ); //end or registtering server TextMessage messageToSend = new TextMessage(); messageToSend.Text="Demi Lovato"; messager.SendMessage(messageToSend); //or if you want to receive a response messager.SendMessage( messageToSend, (msg)=>{ TextMessage receivedMessage=msg; //do something with message } ); } ); await e.StartEasyWebSocketConnectionAsync(ews); } ); svr.StartServer(4222); } } ``` # Can I implement a client in other languages Yes this program uses json and [here](https://tesses.net/libs/Tesses.RPC/HOWTOOTHERLANG.txt) is some documentation on json structure (uses text in WebSocket but I designed this to be usable with other means of transport (as long as sending and receiving are on seperate threads))