A simple abstraction for network programming in C#. Replicate provides a simple yet powerful RPC framework that operates on top of a simple, customizable network abstraction. This is what an echo server/client looks like:
[ReplicateType]
public interface IEchoService
{
Task<string> Echo(string message);
}
public class EchoService : IEchoService
{
public async Task<string> Echo(string message)
{
await Task.Delay(100); // Do some work
return message + " DONE";
}
}
public async Task EchoExample()
{
// Server side
var server = new RPCServer();
server.RegisterSingleton<IEchoService>(new EchoService());
SocketChannel.Listen(server, 55555, new BinarySerializer());
// Client side
var clientChannel = SocketChannel.Connect("127.0.0.1", 55555, new BinarySerializer());
var echoService = clientChannel.CreateProxy<IEchoService>();
Assert.AreEqual("Hello! DONE", await echoService.Echo("Hello!"));
}
Replicate translates networking complexity into programming concepts. Instead of writing/implementing APIs, you use interfaces. Instead of send/receiving messages, or making requests, you call functions.
When writing a server application, the first step is to create an interface like IEchoService
above. Then the server
needs an implementation of this interface, in this case EchoService
. Finally create an RPCServer
, register the
service, and begin listening.
The client side needs only to connect to the same host/port and create a proxy for the service. All of the methods in this proxy are magically implemented with client stubs that call out to the network and wait for a response.