Exemple #1
0
        /// <summary>异步发送数据并等待响应</summary>
        /// <param name="session">会话</param>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public static async Task <Byte[]> SendAsync(this ISocketRemote session, Byte[] buffer)
        {
            var pk = new Packet(buffer);
            var rs = await session.SendAsync(pk).ConfigureAwait(false);

            return(rs?.ToArray());
        }
Exemple #2
0
        /// <summary>异步多次发送数据</summary>
        /// <param name="session">会话</param>
        /// <param name="buffer"></param>
        /// <param name="times"></param>
        /// <param name="msInterval"></param>
        /// <returns></returns>
        public static Boolean SendAsync(this ISocketRemote session, Byte[] buffer, Int32 times, Int32 msInterval)
        {
            if (times <= 1)
            {
                return(session.SendAsync(buffer));
            }

            if (msInterval < 10)
            {
                for (int i = 0; i < times; i++)
                {
                    session.SendAsync(buffer);
                }
                return(true);
            }

            //var src = new TaskCompletionSource<Int32>();

            var timer = new TimerX(s =>
            {
                session.SendAsync(buffer);
                //session.Send(buffer);

                // 如果次数足够,则把定时器周期置空,内部会删除
                var t = s as TimerX;
                if (--times <= 0)
                {
                    t.Period = 0;
                    //src.SetResult(0);
                }
            }, null, 0, msInterval);

            //return src.Task;

            return(true);
        }