コード例 #1
0
ファイル: UserToken.cs プロジェクト: NaHyungMin/Project
        public void SendStart()
        {
            lock (lockObject)
            {
                // 전송이 아직 완료된 상태가 아니므로 데이터만 가져오고 큐에서 제거하진 않는다.
                IRequestItem packet = sendQueue.Peek();

                //총 크기
                byte[] headerBuffer = packet.RequestPacketHearder;
                byte[] buffer       = new byte[headerBuffer.Length + packet.PacketBuffer.Length];

                // 이번에 보낼 패킷 사이즈 만큼 버퍼 크기를 설정하고
                SendArgs.SetBuffer(SendArgs.Offset, buffer.Length);

                //Copy
                Buffer.BlockCopy(headerBuffer, 0, buffer, 0, headerBuffer.Length);
                Buffer.BlockCopy(packet.PacketBuffer, 0, buffer, headerBuffer.Length, packet.PacketBuffer.Length);

                // 패킷 내용을 SocketAsyncEventArgs버퍼에 복사한다.
                Buffer.BlockCopy(buffer, 0, SendArgs.Buffer, SendArgs.Offset, buffer.Length);

                // 비동기 전송 시작.
                bool pending = Socket.SendAsync(SendArgs);
                if (!pending)
                {
                    SendProcess(SendArgs);
                }
            }
        }
コード例 #2
0
        public void Send(IRequestItem requestItem)
        {
            if (token == null)
            {
                throw new NullReferenceException();
            }

            this.token.Send(requestItem);
        }
コード例 #3
0
        public async Task <string> PostItemAsync(IRequestItem item)
        {
            HttpContent         content = new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, "application/json");
            HttpResponseMessage message = await client.PostAsync(GetUri() + item.GetTableName(), content);

            string primaryKey = null;

            if (message.IsSuccessStatusCode)
            {
                string data = await message.Content.ReadAsStringAsync();

                primaryKey = JsonConvert.DeserializeObject <string>(data);
            }

            return(primaryKey);
        }
コード例 #4
0
ファイル: UserToken.cs プロジェクト: NaHyungMin/Project
        public void Send(IRequestItem packet)
        {
            lock (lockObject)
            {
                if (sendQueue.Count <= 0)
                {
                    sendQueue.Enqueue(packet);
                    SendStart();
                    return;
                }

                // 큐에 무언가가 들어 있다면 아직 이전 전송이 완료되지 않은 상태이므로 큐에 추가만 하고 리턴한다.
                // 현재 수행중인 SendAsync가 완료된 이후에 큐를 검사하여 데이터가 있으면 SendAsync를 호출하여 전송해줄 것이다.
                sendQueue.Enqueue(packet);
            }
        }
コード例 #5
0
 private void Download(WebResponse res, Exception error, IRequestItem item)
 {
     if (error == null)
     {
         var html = Http.ReadResponse(res);
         var url  = _parser.ParseUrl(html);
         if (url != null)
         {
             var content = Http.GetData(url);
             _disk.Write("", content);
         }
     }
     else
     {
         Console.WriteLine(error.Message);
     }
 }
コード例 #6
0
        public async Task <string> PostItemAsync(IRequestItem item, string route)
        {
            HttpContent         content = new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, "application/json");
            HttpResponseMessage message = await client.PostAsync(GetUri() + item.GetTableName() + "/" + route, content);

            string primaryKey = null;

            if (!message.IsSuccessStatusCode)
            {
                HttpStatusCode statusCode = message.StatusCode;
                throw new BadHttpStatusCodeException($"Bad status code: {statusCode}", message);
            }
            string data = await message.Content.ReadAsStringAsync();

            primaryKey = JsonConvert.DeserializeObject <string>(data);

            return(primaryKey);
        }
コード例 #7
0
        public bool Request <RequestPacket, ResponsePacket>(RequestPacket requestPacket, ResponseCallback <RequestPacket, ResponsePacket> responseCallback)
            where RequestPacket : IServerPacket
            where ResponsePacket : class, IClientPacket, new()
        {
            IRequestItem requestItem = requester.Request <RequestPacket>(requestPacket);

            server.Send(requestItem);

            RequestHolder requestHolder = new RequestHolder();

            requestHolder.Add <RequestPacket, ResponsePacket>(requestPacket, responseCallback);
            concurrentQueue.Enqueue(requestHolder);

            //responseCallback();
            //responseCallback(requestPacket, new ResponsePacket());

            return(true);
        }
コード例 #8
0
        /// <summary>
        /// 下一个请求
        /// </summary>
        private void NextRequest()
        {
            IRequestItem item = null;

            lock (_obj)
            {
                if (_next < _items.Length)
                {
                    item = _items[_next++];
                }
            }
            if (item != null)
            {
                Exception error = null;
                try
                {
                    var request = CreateRequest(item);
                    request.BeginGetResponse(Response, new object[] { request, item });
                }
                catch (Exception e)
                {
                    error = e;
                }
                //错误回掉
                if (error != null)
                {
                    _callback(null, error, item);
                    //开始下一项请求
                    NextRequest();
                }
            }
            //请求完成计数
            else if (++_completedCount == _parallel)
            {
                if (RequestCompleted != null)
                {
                    RequestCompleted();
                }
            }
        }
コード例 #9
0
 public async void PutItemAsync(IRequestItem item)
 {
     HttpContent         content = new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, "application/json");
     HttpResponseMessage message = await client.PostAsync(GetUri() + item.GetTableName() + "/" + "{item.Id}", content);
 }
コード例 #10
0
ファイル: POWithStatus.cs プロジェクト: gbariluncc/AuditLib
 public POWithStatus(IRequestItem requestItem)
     : base(new PO(requestItem))
 {
     LocationStatus = GetStatusString();
 }
コード例 #11
0
ファイル: PO.cs プロジェクト: gbariluncc/AuditLib
 public PO(IRequestItem requestItem)
     : this(requestItem.Value)
 {
     _requestItem = requestItem;
 }
コード例 #12
0
 public RequestItemDecorator(IRequestItem requestItem)
 {
     _requestItem = requestItem;
 }
コード例 #13
0
ファイル: VendorItem.cs プロジェクト: gbariluncc/AuditLib
 public VendorItem(IRequestItem requestItem)
     : base(requestItem)
 {
 }
コード例 #14
0
 public DCItem(IRequestItem requestItem)
     : base(requestItem)
 {
     _reserves = new HashSet <DCLocation>();
     GetDMSInfo(Value);
 }
コード例 #15
0
 public DCPO(IRequestItem requestItem)
     : base(requestItem)
 {
     _po = new POWithStatus(requestItem.Value);
 }
コード例 #16
0
 public static string GetIcon(IRequestItem requestItem)
 {
     return(SourceTypeHelper.GetIcon(requestItem.Request.Project.Source));
 }
コード例 #17
0
        public static string GetMonochromeIcon(IRequestItem requestItem)
        {
            ISource source = requestItem.Request.Project.Source;

            return(SourceTypeHelper.GetMonochromeIcon(source));
        }
コード例 #18
0
 /// <summary>
 /// 创建请求
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 protected virtual WebRequest CreateRequest(IRequestItem item)
 {
     return(WebRequest.Create(item.Uri));
 }
コード例 #19
0
ファイル: DMSItem.cs プロジェクト: gbariluncc/AuditLib
 public DMSItem(IRequestItem requestItem)
     : base(requestItem)
 {
     GetOH(base.Value);
 }
コード例 #20
0
 public HoldPO(IRequestItem reqeustItem)
     :base(new PO(reqeustItem))
 {
     Initialize();
 }