1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dennis-kk-service-box

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-csharp.md 4.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:55 ea35d5f

C# RPC

Инициализация C# репозитория выполняется в директории src/repo/ командой:

python repo.py -t csharp -i

Для примера с использованием example.idl, выполните следующие команды в директории src/repo/:

python repo.py -t csharp -u example
python repo.py -t csharp -b example

Это создаст файлы, связанные с C# RPC, в директории src/repo/usr/example.

Директорий структура

  • src/repo/usr
    • csharp
      • rpc_framework C# RPC фреймворк
        • base Базовый фреймворк
        • buffer Чтение/запись буферов
        • lib Внешние библиотеки
        • pool Объектные пули
        • socket TCP сетевые клиенты
      • rpc.register.cs Файл регистрации RPC
      • example Примеры сервисов, определённых в example.idl
        • каталог Различные реализации сервисов
        • example.service.cs Реализация вызова/возврата сервисов из example.idl
        • example.service.protobuf.serializer.cs Google Protobuf сериализатор
        • ExampleService.cs Генерируемые файлы Google Protobuf

C# RPC фреймворк

Содержимое директории src/repo/usr/csharp/rpc_framework представляет собой реализацию C# версии RPC.

Использование C# версии (Unity3D)

using UnityEngine;
using kratos;
using rpc;
using System;

public class Network : MonoBehaviour
{
    IRpc rpc_ = null; // RPC фреймворк
    LoginProxy login_prx_ = null; // Локальный прокси для службы Login

    // Интерфейс логирования
    class Logger : kratos.ILogger
    {
        public void Debug(string log)
        {
            UnityEngine.Debug.Log(log);
        }

        public void Fail(string log)
        {
            UnityEngine.Debug.LogError(log);
        }

        public void Fatal(string log)
        {
            UnityEngine.Debug.LogError(log);
        }
``````markdown
    // Start is called before the first frame update
    async void Start()
    {
        // Создание RPC-фреймворка
        rpc_ = RpcFactory.create();
        // Инициализация, создание логгера
        rpc_.Initialize(new Logger());
        // Включение автоматического повторного подключения
        rpc_.AutoReconnect = true;
        // Установка интервала автоматического повторного подключения в миллисекундах
        rpc_.AutoReconnectIntervalMs = 1000;
        // Использование Tick вместо реального времени, что позволяет снизить количество запросов к системному времени, но может привести к небольшой ошибке, которая не превышает одну кадровую длительность
        rpc_.UseTickAsTimestamp = true;
        // Включение вызова корутин для соединения с серверной группой
        bool ret = await rpc_.Connect("127.0.0.1", 6888, 2000);
        // Вывод результата подключения в лог
        Debug.Log($"Connection completed: {ret}");
        // Получение локальной версии агента Login
        login_prx_ = Proxy.GetLogin();
    }
``````markdown
    // Update is called once per frame
    void Update()
    {
        // Основной цикл RPC-фреймворка выполняется каждую фрейм
        rpc_.Update();
    }

    private async void LateUpdate()
    {
        if (login_prx_ != null)
        {
            // Включаем корутину, которая вызывает метод Login::login каждый фрейм
            var id = await login_prx_.login("123", "456");
            Debug.Log($"Login result: {id}");
        }
    }
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dennis-kk-service-box.git
git@api.gitlife.ru:oschina-mirror/dennis-kk-service-box.git
oschina-mirror
dennis-kk-service-box
dennis-kk-service-box
v0.4.0-alpha