Go to file
Mike Nolan bd4d33670e Add Id to MessageReceived 2023-06-19 05:03:38 -05:00
ClientExample Initial commit 2022-12-12 11:24:00 -06:00
CommonExample Initial commit 2022-12-12 11:24:00 -06:00
ServerExample Initial commit 2022-12-12 11:24:00 -06:00
Tesses.RPC Add Id to MessageReceived 2023-06-19 05:03:38 -05:00
Tesses.RPCClient Initial commit 2022-12-12 11:24:00 -06:00
Tesses.SystemNetWebSocketsRPC Initial commit 2022-12-12 11:24:00 -06:00
Tesses.WebServer.WebSocketRPC Initial commit 2022-12-12 11:24:00 -06:00
.gitignore Initial commit 2022-12-12 11:24:00 -06:00
HOWTOOTHERLANG.txt Initial commit 2022-12-12 11:24:00 -06:00
LICENSE.md Initial commit 2022-12-12 11:24:00 -06:00
README.md Initial commit 2022-12-12 11:24:00 -06:00

README.md

Tesses.RPC

A Simple RPC Library for my WebServer

License

GPL3-only Licensed under GPL3

How to use (client)

Install this nuget package if you are not using blazor wasm or if you are use this package

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<MessageType,IMessage>? 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<TextMessage>(messageToSend);

                    //or if you want to receive a response
                    messager.SendMessage<TextMessage>(
                        messageToSend,
                        (msg)=>{
                            TextMessage receivedMessage=msg;
                            //do something with message
                        }
                    );
                }
            }
        );
        messager = new JsonMessager<MessageType, IMessage>(msghndlr);

        messager.Register<TextMessage>(
            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<NumberMessage>(
            MessageType.Number,
            (msg)=>{
                NumberMessage receivedMessage=msg.Data;
                
                if(msg.NeedReply) //true if server sends message with messager.SendMessage<SomeType>(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 nuget package (and this one)

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<MessageType,IMessage> messager=new JsonMessager<MessageType,IMessage>(mhandler);

                         messager.Register<TextMessage>(
                            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<NumberMessage>(
                            MessageType.Number,
                            (msg)=>{
                                NumberMessage receivedMessage=msg.Data;
                
                                if(msg.NeedReply) //true if client sends message with messager.SendMessage<SomeType>(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<TextMessage>(messageToSend);

                        //or if you want to receive a response
                        messager.SendMessage<TextMessage>(
                            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 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))