예제 #1
0
        public void Build(string requestLogFile, string responseLogFile, string contentFolder, string outputFolder)
        {
            // Load requests file
            DataTable requestDataTable = CSVUtilities.LoadCSVInToDataTable(requestLogFile, (Char)9, -1, -1);

            // Get request match list
            List <RequestMatch> requestMatchList = GetRequestMatchList();

            // Process requests
            for (int requestRowIndex = 0; requestRowIndex < requestDataTable.Rows.Count; requestRowIndex++)
            {
                // Get request details
                RequestDetails requestDetails = GetRequestDetails(requestDataTable, requestRowIndex);

                // Identify request type
                RequestMatch requestMatch = GetRequestMatch(requestDetails, requestMatchList);

                if (requestMatch != null)    // Request type that we handle
                {
                    switch (requestMatch.ActionType)
                    {
                    case RequestMatch.ActionTypes.PostBatch:
                        ProcessPostBatch(requestDetails, requestMatch, contentFolder, outputFolder);
                        break;

                    case RequestMatch.ActionTypes.DeleteAll:
                        ProcessDeleteAll(requestDetails, requestMatch, contentFolder, outputFolder);
                        break;

                    case RequestMatch.ActionTypes.PostRun:
                        break;
                    }
                }
            }
        }
예제 #2
0
 public HttpRecord(HttpRequestMessage httpRequestMessage, RequestMatch match)
 {
     HttpRequestMessage = httpRequestMessage;
     Match = match;
     HttpResponseMessage = match.ToHttpResponseMessage();
     HttpResponseMessage.RequestMessage = httpRequestMessage;
     Match.AddCallInstance(this);
 }
예제 #3
0
        // 请求匹配
        private void MessageRequestMatch(MessageInfo messageInfo)
        {
            RequestMatch _info = ProtoTransfer.DeserializeProtoBuf3 <RequestMatch>(messageInfo.Buffer);
            User         user  = UserManager.Instance.GetUserByToken(_info.Token);

            MatchManager.Instance.AddMatchUser(user);
            MessageBuffer _message = new MessageBuffer((int)MessageID.ScResponseMatch, ProtoTransfer.SerializeProtoBuf3(new ResponseRequestMatch()), user.Id);

            Debug.Log("用户请求匹配");
            Send(new MessageInfo(_message, messageInfo.Session));
        }
예제 #4
0
 private bool IsMatch(RequestDetails requestDetails, RequestMatch requestMatch)
 {
     if (requestDetails.Method.ToUpper() == requestMatch.Method.ToUpper())
     {
         if (requestDetails.URL.ToLower().EndsWith(requestMatch.URLPattern.ToLower()))   // Currently only supports ends with
         {
             return(true);
         }
     }
     return(false);
 }
예제 #5
0
        public static bool IsCorrectRecord(this string data)
        {
            if (!RequestMatch.IsMatch(data))
            {
                return(false);
            }

            string matchedValue = RequestMatch.Match(data).GetValue(HostNameOrAddress);

            return(matchedValue.IsIpv4() ||
                   matchedValue.IsIpv6() ||
                   matchedValue.IsHost());
        }
예제 #6
0
        private void ProcessDeleteAll(RequestDetails requestDetails, RequestMatch requestMatch, string contentFolder, string outputFolder)
        {
            // Create folder for this category of data, causes DELETE to be executed. This might be necessary if there's no
            // data to upload. E.g. Schedule.
            string entityOutputFolder = string.Format(@"{0}\{1}", outputFolder, requestMatch.TargetEntity);

            Directory.CreateDirectory(entityOutputFolder);

            // string srcContentFile = string.Format(@"{0}\{1}.request.content", contentFolder, requestDetails.Id);

            // Create data file, sequence number ensures processing in same order, assume compressed format
            //int fileSequence = Directory.GetFiles(entityOutputFolder, "*.*").Length + 1;
            //string dstContentFile = string.Format(@"{0}\{1}.{2}.gz", entityOutputFolder, requestMatch.TargetEntity, fileSequence.ToString("0000"));
        }
예제 #7
0
        /// <summary>
        /// Processes the request to upload a batch of data
        /// </summary>
        /// <param name="requestDetails"></param>
        /// <param name="requestMatch"></param>
        /// <param name="contentFolder"></param>
        /// <param name="outputFolder"></param>
        private void ProcessPostBatch(RequestDetails requestDetails, RequestMatch requestMatch, string contentFolder, string outputFolder)
        {
            // Create folder for this category of data
            string entityOutputFolder = string.Format(@"{0}\{1}", outputFolder, requestMatch.TargetEntity);

            Directory.CreateDirectory(entityOutputFolder);

            string srcContentFile = string.Format(@"{0}\{1}.request.content", contentFolder, requestDetails.Id);

            // Create data file, sequence number ensures processing in same order, assume compressed format
            int    fileSequence   = Directory.GetFiles(entityOutputFolder, "*.*").Length + 1;
            string dstContentFile = string.Format(@"{0}\{1}.{2}.gz", entityOutputFolder, requestMatch.TargetEntity, fileSequence.ToString("0000"));

            // Copy data file
            File.Copy(srcContentFile, dstContentFile);
        }
예제 #8
0
        /* Vi kigger på en request og gennemgår lokaler for at finde et match. Når vi finder et match
         * opretter vi et nyt objekt med gruppeid og klasseid og lægger på en liste matchedRequests.
         * Konkret:
         * int i sættes til 0. Hvis listen af stillNotfulfilled er længere end 0 OG  listen af lokaler er
         * større end 0 så undersøg for requestCode = requestMatch.
         * (Finder kun == og ikke de lokaler som er større som matcher, da det ikke er alle lokaler med en større
         * kode, der vil matche) Findes et match så dannes det ny objekt og lægges på en liste og lokalets
         * requestMatch nedskrives, size nedskrives og groupcount tælles op. Hvis GroupCount er >= 3 fjernes
         * dette lokale fra lokalelisten. (Oprindelig var kravet at der ikke måtte være flere end 3 grupper
         * eller flere end 18 mennesker i et klasselokale, men da vi har sat max på gruppestørrelser til 7 (en
         * dropdown) vil det ikke være relevant at tælle på antal personer. Til sidst sættes i til 0 så alle lokaler
         * igen køres igennem. Hvis der ikke fandtes match så i++ så næste lokale tjekkes.
         * VI MANGLER AT REQUESTKODEN OGSÅ KAN VÆRE == 7. Det vil alle være tilfredse med.
         */
        public void doTheFunkyAlgorythm(List <RequestClassroom> stillNotFulfilled, List <ClassRoom> lessThanThree)
        {
            dBCtrl.ClearRents();

            List <int>          notFulfilled    = new List <int>();
            List <RequestMatch> matchedRequests = new List <RequestMatch>();
            int i = 0;

            while (lessThanThree.Count > 0 && stillNotFulfilled.Count > 0)
            {
                if ((lessThanThree[i].RequestMatch & stillNotFulfilled[0].RequestCode) == stillNotFulfilled[i].RequestCode)
                {
                    RequestMatch requestMatch = new RequestMatch(stillNotFulfilled[0].GroupId, lessThanThree[i].Id);
                    matchedRequests.Add(requestMatch);
                    lessThanThree[i].RequestMatch -= stillNotFulfilled[0].RequestCode;
                    lessThanThree[i].Size         -= stillNotFulfilled[0].GroupSize;
                    stillNotFulfilled.Remove(stillNotFulfilled[0]);
                    lessThanThree[i].GroupCount++;
                    if (lessThanThree[i].GroupCount >= 3)
                    {
                        lessThanThree.Remove(lessThanThree[i]);
                    }
                    i = 0;
                }
                else
                {
                    i++;
                    if (lessThanThree.Count <= i)
                    {
                        notFulfilled.Add(stillNotFulfilled[0].GroupId);
                        stillNotFulfilled.Remove(stillNotFulfilled[0]);
                        i = 0;
                    }
                }
            }
            rCtrl.RentClassRooms(matchedRequests);
            List <int> groupIds     = new List <int>();
            List <int> classroomIds = new List <int>();

            foreach (RequestMatch rm in matchedRequests)
            {
                groupIds.Add(rm.GroupId);
                classroomIds.Add(rm.ClassroomId);
            }
            Mail mail = new Mail(groupIds, classroomIds, notFulfilled);
        }
 public DefaultRequestCommand(RequestMatch match, ApplicationBehaviour application_behaviour)
 {
     this.match = match;
     this.application_behaviour = application_behaviour;
 }