public async Task <TResponseParams> SendOperation <TRequestParams, TResponseParams>(IYield yield, byte operationCode, TRequestParams parameters)
            where TRequestParams : struct, IParameters
            where TResponseParams : struct, IParameters
        {
            var code = (TOperationCode)Enum.ToObject(typeof(TOperationCode), operationCode);

            if (!IsConnected())
            {
                LogUtils.Log($"Failed to send {code} operation because there is no connection with a server.");
                return(default(TResponseParams));
            }

            try
            {
                var requestId          = operationRequestSender.Send(code, parameters, MessageSendOptions.DefaultReliable());
                var responseParameters = await subscriptionProvider.ProvideSubscription <TResponseParams>(yield, requestId);

                return(responseParameters);
            }
            catch (OperationNotHandledException)
            {
                LogUtils.Log($"Operation {code} not handled; sent a default operation response.");
                return(default(TResponseParams));
            }
        }
Ejemplo n.º 2
0
        public async Task <TResponseParams> SendOperation <TRequestParams, TResponseParams>(IYield yield, byte operationCode, TRequestParams parameters, MessageSendOptions messageSendOptions)
            where TRequestParams : struct, IParameters
            where TResponseParams : struct, IParameters
        {
            if (!IsConnected())
            {
                return(default(TResponseParams));
            }

            var code               = (TOperationCode)Enum.ToObject(typeof(TOperationCode), operationCode);
            var requestId          = operationRequestSender.Send(code, parameters, messageSendOptions);
            var responseParameters = await subscriptionProvider.ProvideSubscription <TResponseParams>(yield, requestId);

            return(responseParameters);
        }