/// <summary> /// 调用远程端的Api /// 并返回结果数据任务 /// </summary> /// <typeparam name="T">返回值类型</typeparam> /// <param name="session">会话对象</param> /// <param name="taskSetActionTable">任务行为表</param> /// <param name="serializer">序列化工具</param> /// <param name="packet">封包</param> /// <param name="timeout">超时时间</param> /// <exception cref="SocketException"></exception> /// <returns></returns> public static ApiResult <T> InvokeApi <T>(ISession session, TaskSetterTable <long> taskSetActionTable, ISerializer serializer, FastPacket packet, TimeSpan timeout) { var taskSetter = taskSetActionTable.Create <T>(packet.Id, timeout); session.Send(packet.ToArraySegment()); return(new ApiResult <T>(taskSetter)); }
/// <summary> /// 调用远程端的Api /// 并返回结果数据任务 /// </summary> /// <typeparam name="T">返回值类型</typeparam> /// <param name="session">会话对象</param> /// <param name="taskSetActionTable">任务行为表</param> /// <param name="serializer">序列化工具</param> /// <param name="packet">封包</param> /// <param name="timeout">超时时间</param> /// <exception cref="SocketException"></exception> /// <returns></returns> public static ApiResult <T> InvokeApi <T>(IChannel session, TaskSetterTable <long> taskSetActionTable, ISerializer serializer, FastPacket packet, TimeSpan timeout) { var taskSetter = taskSetActionTable.Create <T>(packet.Id, timeout); lock (session) session.WriteAndFlushAsync(packet); return(new ApiResult <T>(taskSetter)); }
/// <summary> /// 发送消息到远程端并等待返回 /// </summary> /// <param name="topic">主题</param> /// <param name="api">api</param> /// <param name="body">内容</param> /// <exception cref="TimeoutException"></exception> /// <returns></returns> public static async Task <Message> SendAsync(SingleTopic topic, Api api, ITimeoutRequest body) { var message = EmqttdClient.GenerateMessage(api, body, Mode.Send); var key = message.GetUniqueKey(topic.UniqueId); var timeout = TimeSpan.FromSeconds(body.Timeout); var taskSetter = taskTable.Create <Message>(key, timeout); await EmqttdClient.PublishAsync(topic, message); return(await taskSetter.GetTask()); }