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)); } }
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); }