Snippets

HBPNeurorobotics EngineGRPCServer.cs(Last version)

Created by erdisayar
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using Grpc.Core;
using Google.Protobuf;
using Google.Protobuf.Collections;
using Google.Protobuf.WellKnownTypes;
using TMPro;
using EngineGrpc;
using UnitySim;

using System.Threading;
using System.Threading.Tasks;

public class EngineGRPCServer : MonoBehaviour
{   
   public Unity_NRPCore_Interface unity_nrpcore_interface_instance = new Unity_NRPCore_Interface();
    void Start()
    {   
        
        var server = new Server()
        {
            Services = { EngineGrpc.EngineGrpcService.BindService(unity_nrpcore_interface_instance) },
            Ports = { new ServerPort("localhost", 50052, ServerCredentials.Insecure) }
        };
        server.Start();
    }

    void FixedUpdate()
    {   
        gameObject.transform.position = new Vector3(unity_nrpcore_interface_instance.posx, unity_nrpcore_interface_instance.posy, unity_nrpcore_interface_instance.posz);
    }
}
public class Unity_NRPCore_Interface : EngineGrpc.EngineGrpcService.EngineGrpcServiceBase
{
    public float posx, posy, posz;
    public override Task<EngineGrpc.InitializeReply> initialize(EngineGrpc.InitializeRequest request, ServerCallContext context)
    {
        var response = new EngineGrpc.InitializeReply {  Json = "Initialize Reply Message" };
        request.Json = "Initialize Request Message";
        return Task.FromResult(response);
    }

    public override Task<EngineGrpc.RunLoopStepReply> runLoopStep(EngineGrpc.RunLoopStepRequest request, ServerCallContext context)
    {
        var response = new EngineGrpc.RunLoopStepReply { EngineTime = 0 };
        return Task.FromResult(response);
    }

    public override Task<EngineGrpc.ShutdownReply> shutdown(EngineGrpc.ShutdownRequest request, ServerCallContext context)
    {
        var response = new EngineGrpc.ShutdownReply { Json = "shut down reply" };
        request.Json = "shut down request";
        return Task.FromResult(response);
    }

    public override Task<EngineGrpc.SetDataPacksReply> setDataPacks(EngineGrpc.SetDataPacksRequest request, ServerCallContext context)
    {   
        
        UnitySim.Position position_vector = new UnitySim.Position();
        request.DataPacks[0].Data.TryUnpack<UnitySim.Position>(out position_vector);
        posx = position_vector.X;
        posy = position_vector.Y;
        posz = position_vector.Z;
        
        var response = new EngineGrpc.SetDataPacksReply { };
        return Task.FromResult(response);
    }

    public override Task<EngineGrpc.GetDataPacksReply> getDataPacks(EngineGrpc.GetDataPacksRequest request, ServerCallContext context)
    {   //Debug.Log("getDataPacks is started");
        DataPackMessage feedback_position = new DataPackMessage();
        DataPackIdentifier feedback_position_id = new DataPackIdentifier();
        feedback_position_id.DataPackName = "cube";
        feedback_position_id.DataPackType = "position";
        feedback_position_id.EngineName = "unity";

        UnitySim.Position pos_data = new UnitySim.Position();
        pos_data.X =posx;
        pos_data.Y =posy;
        pos_data.Z =posz;
        feedback_position.DataPackId = feedback_position_id;
        feedback_position.Data = Any.Pack(pos_data);

        var response = new EngineGrpc.GetDataPacksReply {};
        response.DataPacks.Add(feedback_position);
        return Task.FromResult(response);
    }

    public override Task<EngineGrpc.ResetReply> reset(EngineGrpc.ResetRequest request, ServerCallContext context)
    {
        var response = new EngineGrpc.ResetReply { };
        return Task.FromResult(response);
    }


}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.