Skip to content
forked from HavenDV/H.Ipc

C# Source Generator library for Inter-Process Communication

License

Notifications You must be signed in to change notification settings

JaseRandall/H.Ipc

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

196 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

H.Ipc

This generator allows you to generate boilerplate code for H.Pipes based on the interface you specify. Generation example: HavenDV/H.ProxyFactory#7 (comment)

Nuget

NuGet

Install-Package H.Ipc

Usage

// Common interface
public interface IActionService
{
    Task ShowTrayIcon();
    Task HideTrayIcon();
    Task SendText(string text);
    Task<int> GetAnswer(string question);
}

// Server side implementation
[H.IpcGenerators.IpcServer]
public partial class ActionService : IActionService
{
    public Task ShowTrayIcon()
    {
        MessageBox.Show(nameof(ShowTrayIcon));
        return Task.CompletedTask;
    }

    public Task HideTrayIcon()
    {
        MessageBox.Show(nameof(HideTrayIcon));
        return Task.CompletedTask;
    }

    public Task SendText(string text)
    {
        MessageBox.Show(text);
        return Task.CompletedTask;
    }
    
    public async Task<int> GetAnswer(string question)
    {
        return await Simulator.CalculateAnswer(question);
    }    
}

// Client side implementation
[H.IpcGenerators.IpcClient]
public partial class ActionServiceClient : IActionService
{
}

// Server initialization
await using var server = new PipeServer<string>(ServerName);
var service = new ActionService();
service.Initialize(server);
await server.StartAsync();

// Client initialization
await using var client = new PipeClient<string>(ServerName);
var service = new ActionServiceClient();
service.Initialize(client);
await client.ConnectAsync();

// Client usage
await client.ShowTrayIcon();
await client.SendText("Hello world!");
var result = await client.GetAnswer("What's the answer to the ultimate question of life, the universe, and everything?");

Notes

The generated code currently requires C# version 8 and above. You can enable this using the following code in your .csproj file:

<PropertyGroup>
  <LangVersion>latest</LangVersion> <!-- or just 8.0 -->
</PropertyGroup>

Contacts

About

C# Source Generator library for Inter-Process Communication

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%