public override ActionResponse GetActionResponse(int environmentSymbol, float[] state, float reward, bool done)
    {
        ActionResponse response = new ActionResponse();

        // Send message with (symbol, *state, reward, done)
        network.SetFloatInBuffer(environmentSymbol, 0);
        network.SetArrayFloatsInBuffer(state, 1);
        network.SetFloatInBuffer(reward, observationDimension + 1);
        network.SetFloatInBuffer(done ? 1f : 0f, observationDimension + 2);
        network.Send();

        // Receive status symbol & action
        network.ReceiveFloatsAndString(1 + actionDimension, receiveBuffer, ref receivedMessage);
        AgentActionSymbol agentSymbol = (AgentActionSymbol)Mathf.RoundToInt(receiveBuffer[0]);

        for (int i = 1; i < receiveBuffer.Length; i++)
        {
            actions[i - 1] = receiveBuffer[i];
        }

        // Return
        response.symbol  = agentSymbol;
        response.actions = actions;
        response.msg     = receivedMessage;
        return(response);
    }