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; } } } }
public HttpRecord(HttpRequestMessage httpRequestMessage, RequestMatch match) { HttpRequestMessage = httpRequestMessage; Match = match; HttpResponseMessage = match.ToHttpResponseMessage(); HttpResponseMessage.RequestMessage = httpRequestMessage; Match.AddCallInstance(this); }
// 请求匹配 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)); }
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); }
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()); }
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")); }
/// <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); }
/* 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; }