# Wing

Wing is an JsonRPC service framework

## Features
- [x] Based on the JSONRPclite project.

## Structure

The project structure is shown below

##### AppWorkerCenter

Service publishing and registry


##### AppFramework

The service framework is used for registration and is run by the AppWorkerCenter invocation

## Usage

##### 1.Create a rpc class library
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard1.png)
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard2.png)
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard3.png)

##### 2.Create a file directory
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard4.png)

##### 3.Introducing a dependency library
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard5.png)

##### 4.Define interfaces and parameters
```csharp
using AppFramework.JsonRpc.Driver;
using System.Threading.Tasks;
using TestRpc.Entity;

namespace TestRpc.Service
{
    public interface INewService
    {
        Task<int> Add(AddRequest request);
    }
}

using AppFramework.JsonRpc.Driver.Validator;
using System.Text.Json.Serialization;

namespace TestRpc.Entity
{
    public class AddRequest
    {
        public string A { get; set; }

        public string B { get; set; }
    }
}
```


##### 5.Implementing an interface
```csharp
using AppFramework.JsonRpc.Driver;
using System.Threading.Tasks;
using TestRpc.Entity;

namespace TestRpc.Service
{
    public class NewService : BaseRpcService, INewService
    {
        public async Task<int> Add(AddRequest request)
        {
            var result = int.Parse(request.A)+int.Parse(request.B);
            return await Task.FromResult(result);
        }
    }
}
```


##### 6.Implementing an Loader
```csharp
using AppFramework.Common.Loader;
using System;
using TestRpc.Service;

namespace TestRpc.ServiceLoader
{
    public class NewServiceLoader : IServiceLoader
    {
        public object CreateService()
        {
            return new NewService();
        }

        public Type GetServiceType()
        {
            return typeof(INewService);
        }
    }
}
```

##### Start server
```
cd AppWorkerCenter/WingCloudServer
dotnet build
copy ../TestRpc.dll AppWorkerCenter/WingCloudServer/bin/Debug/net5.0/NetService/TestRpc.dll
dotnet run
```

##### For clinet test (postman)
![image](http://git.ius.plus:88/Project-Wing/Wing/raw/master/ShowImages/clipboard6.png)

##### ServerReboot
Automatic service restart

##### Sms.Tool
SMS sending program

##### GoStaticSev
Static file server

##### EmailTemplate
Email template