Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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));
        }
Ejemplo n.º 3
0
        /// <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());
        }