//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void Start() { m_startTicks = Environment.TickCount; m_lastOutputTimestamp = m_startTicks; m_exitMutex = new ManualResetEvent(false); m_process = new SyncProcess(); m_process.StartInfo = StartInfo; m_process.OutputDataReceived += new DataReceivedEventHandler(ProcessStdout); m_process.ErrorDataReceived += new DataReceivedEventHandler(ProcessStderr); m_process.Exited += new EventHandler(ProcessExited); m_process.EnableRaisingEvents = true; LoggingUtils.Print(string.Format("[SyncRedirectProcess] Start: {0} (Args=\"{1}\" Pwd=\"{2}\")", m_process.StartInfo.FileName, m_process.StartInfo.Arguments, m_process.StartInfo.WorkingDirectory)); m_process.Start(); m_process.BeginOutputReadLine(); m_process.BeginErrorReadLine(); }
public ActionResult CheckWarehouse() { try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask("出貨倉資料同步工作"); MyHelp.Log("Warehouses", null, "出貨倉資料同步"); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { SyncProcess Sync = new SyncProcess(session); message = Sync.Sync_Warehouse(); } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } finally { } return(Content(JsonConvert.SerializeObject(new { status = true, message = "Sync starting!" }), "appllication/json")); }
private void UpdatePurchaseOrder(Packages package, int reTry = 0) { try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask(string.Format("直發商待出貨區 - 更新訂單【{0}】以及PO【{1}】資料至SC", package.OrderID, package.POId)); lock (factory) { threadTask.AddWork(factory.StartNew(session => { threadTask.Start(); string error = ""; try { HttpSessionStateBase Session = (HttpSessionStateBase)session; SyncProcess Sync = new SyncProcess(Session); error = Sync.Update_PurchaseOrder(package.ID); } catch (Exception e) { error = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(error); }, HttpContext.Session)); } } catch (Exception e) { throw e; } }
static void StartNewGame() { StartTasksProcess = null; StartThreadsProcess = null; PrintResultEvent = null; StartNewGameEvent = null; var duration = 10; var numberOfTreads = 10; var input = ""; Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("********************* Welcome to Threads War!!! May the best win **************************"); Console.WriteLine(); //Number of Interactions Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Enter number of interactions"); Console.ForegroundColor = ConsoleColor.Yellow; input = Console.ReadLine(); while (!int.TryParse(input, out duration)) { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Please enter correct number"); Console.ForegroundColor = ConsoleColor.Yellow; input = Console.ReadLine(); } //Number of Threads Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Enter number of threads"); Console.ForegroundColor = ConsoleColor.Yellow; input = Console.ReadLine(); while (!int.TryParse(input, out numberOfTreads)) { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Please enter correct number"); Console.ForegroundColor = ConsoleColor.Yellow; input = Console.ReadLine(); } Console.ForegroundColor = ConsoleColor.White; var dataArray = GetRandomNumberArray(duration); IProcess syncProcess = new SyncProcess(dataArray); IProcess tasksProcess = new AsyncTaskProcess(dataArray); IProcess threadsProcess = new MultyThreadProcess(dataArray, numberOfTreads); StartTasksProcess += new EventHandler(tasksProcess.Start); StartThreadsProcess += new EventHandler(threadsProcess.Start); PrintResultEvent += new EventHandler(() => PrintResult(syncProcess.ResultTime, tasksProcess.ResultTime, threadsProcess.ResultTime)); StartNewGameEvent += new EventHandler(StartNewGame); syncProcess.AfterFinishEvent = StartTasksProcess; tasksProcess.AfterFinishEvent = StartThreadsProcess; threadsProcess.TimeResultEvent = PrintResultEvent; //threadsProcess.StartNewGameEvent = StartNewGameEvent; syncProcess.Start(); }
public ActionResult CheckPurchaseItem() { SyncResult result = new SyncResult(); try { IRepository <Packages> Packages = new GenericRepository <Packages>(db); IRepository <Items> Items = new GenericRepository <Items>(db); string[] productIDs = Packages.GetAll(true).Where(p => p.ProcessStatus == (int)EnumData.ProcessStatus.待出貨).Join(Items.GetAll(true), p => p.ID, i => i.PackageID, (p, i) => i.ProductID).Distinct().ToArray(); if (productIDs.Length == 0) { return(Content(JsonConvert.SerializeObject(result.set_error("沒有需要同步的產品!")), "appllication/json")); } TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask("產品序號同步工作"); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { SyncProcess Sync = new SyncProcess(session); message = Sync.Sync_PurchaseItem(productIDs); } catch (DbEntityValidationException ex) { var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage); message = string.Join("; ", errorMessages); } catch (Exception e) { message = e.Message; } return(message); }, HttpContext.Session)); } result.taskID = threadTask.ID; } catch (Exception e) { return(Content(JsonConvert.SerializeObject(result.set_error(e.Message)), "appllication/json")); } return(Content(JsonConvert.SerializeObject(result), "appllication/json")); }
public ActionResult GetOrder(List <string> orderIDs) { SyncResult result = new SyncResult(); if (!orderIDs.Any()) { return(Content(JsonConvert.SerializeObject(result.set_error("沒有取得訂單號碼!")), "appllication/json")); } try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; foreach (string orderID in orderIDs) { ThreadTask threadTask = new ThreadTask(string.Format("訂單管理區 - 訂單【{0}】資料同步", orderID)); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { SyncProcess Sync = new SyncProcess(session); message = Sync.Sync_Order(int.Parse(orderID)); } catch (DbEntityValidationException ex) { var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage); message = string.Join("; ", errorMessages); } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } } catch (Exception e) { return(Content(JsonConvert.SerializeObject(result.set_error(e.Message)), "appllication/json")); } return(Content(JsonConvert.SerializeObject(result), "appllication/json")); }
public ActionResult CheckOrder(int day) { SyncResult result = new SyncResult(); try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask(string.Format("同步{0}天訂單資料", day)); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { SyncProcess Sync = new SyncProcess(session, factory); message = Sync.Sync_Orders(day); } catch (DbEntityValidationException ex) { var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage); message = string.Join("; ", errorMessages); } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, Session)); } } catch (Exception e) { return(Content(JsonConvert.SerializeObject(result.set_error(e.Message)), "appllication/json")); } return(Content(JsonConvert.SerializeObject(result), "appllication/json")); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// protected virtual void Dispose(bool disposing) { if (disposing) { if (m_process != null) { m_process.Dispose(); m_process = null; } if (m_exitMutex != null) { m_exitMutex.Dispose(); m_exitMutex = null; } } }
private void Start() { SyncProcess _sync = new SyncProcess(); // Register(new Random().Next(0, 32000), ""); _sync.OnComplete += ImportComplete; // _thread = new Thread(() => { try { _sync.Run(); } catch (Exception ex) { } }); // _thread.Start(); }
public void UpdatePurchaseOrder(int PackageID) { SyncProcess Sync = new SyncProcess(Session); Sync.Update_PurchaseOrder(PackageID); }
private void OnSyncProcess(Process process) { SyncProcess?.Invoke(this, new SyncProcessEventArgs(process)); }
public void Load_ValidXml_CreateObjects() { SyncProcess sp = new SyncProcess(); sp.Load(@" <SyncProcess> <Endpoints> <Source> <ProviderFields> <ProviderField isKey=""true"" name=""FieldName1"" type=""System.Int32"" /> <ProviderField name=""FieldName2"" type=""System.Int32"" /> </ProviderFields> <IDataProvider> <SqlDataProvider connectionString=""some connection"" query=""select * from agents"" /> </IDataProvider> </Source> <Destination templateId=""0""> <TemplateField id=""0"" guid=""f90a2ea5-6d48-4ea0-afa3-b7448e980ddf"" isKey=""true"" name=""double field"" type=""System.Double"" mappedTo=""FieldName1"" /> <TemplateField id=""0"" guid=""504b52d5-5a1a-4405-a939-0c7deeafe0ee"" name=""int field"" type=""System.Int32"" /> <TemplateField id=""0"" guid=""2ff7250d-d9d8-4125-b12d-82a57bfa4118"" name=""text field"" type=""System.String"" /> </Destination> </Endpoints> <Map script=""
	result["double field"].Value = @FieldName1;
	result["int field"].Value = @FieldName2;
	return result;"" version=""1""> <designer> <ExpressionContainer xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Cebos.Veyron.Controls.MapPanel.Core.Persistance.Designer""> <Expression> <PersistentDesignerObjectBase i:type=""PersistentDesignerSourceFieldList""> <ExpressionName>source</ExpressionName> <FunctionName i:nil=""true"" /> <Height>0</Height> <Id>c7014d11-2fee-4cf8-ace0-e8210f9f15fa</Id> <Left>20</Left> <Top>70</Top> <Type>SourceField</Type> <Width>0</Width> <Fields> <PersistentDesignerSourceField> <ConnectorOut> <DataType>Int</DataType> <Id>4f35dc35-a079-4b92-8dab-869cebd9f87f</Id> <Name>FieldName1</Name> </ConnectorOut> <InnerName i:nil=""true"" /> <Name>FieldName1</Name> <SetName>Item</SetName> </PersistentDesignerSourceField> <PersistentDesignerSourceField> <ConnectorOut> <DataType>Int</DataType> <Id>7542e863-fe56-4b55-b358-ae8473642b96</Id> <Name>FieldName2</Name> </ConnectorOut> <InnerName i:nil=""true"" /> <Name>FieldName2</Name> <SetName>Item</SetName> </PersistentDesignerSourceField> </Fields> </PersistentDesignerObjectBase> <PersistentDesignerObjectBase i:type=""PersistentDesignerDestinationFieldList""> <ExpressionName>destination</ExpressionName> <FunctionName i:nil=""true"" /> <Height>0</Height> <Id>f90b2240-df82-4243-9707-a8c6eec829ad</Id> <Left>500</Left> <Top>70</Top> <Type>Destination</Type> <Width>0</Width> <Fields> <PersistentDesignerDestinationField> <ConnectorIn> <DataType>Double</DataType> <Id>740c9fb2-22ce-4241-9f20-c7949245b612</Id> <Name>double field</Name> </ConnectorIn> <Name>double field</Name> </PersistentDesignerDestinationField> <PersistentDesignerDestinationField> <ConnectorIn> <DataType>Int</DataType> <Id>d3a1e978-1a5b-48d4-a41f-e221e39d1a48</Id> <Name>int field</Name> </ConnectorIn> <Name>int field</Name> </PersistentDesignerDestinationField> <PersistentDesignerDestinationField> <ConnectorIn> <DataType>String</DataType> <Id>2e4ea46d-69f2-4b89-a4e6-4bd3c6a02b36</Id> <Name>text field</Name> </ConnectorIn> <Name>text field</Name> </PersistentDesignerDestinationField> </Fields> </PersistentDesignerObjectBase> <PersistentDesignerObjectBase i:type=""PersistentDesignerConnection""> <ExpressionName i:nil=""true"" /> <FunctionName i:nil=""true"" /> <Height>0</Height> <Id>bff784a0-e890-4af3-be5c-26c1dfff8925</Id> <Left>0</Left> <Top>0</Top> <Type>Connection</Type> <Width>0</Width> <SinkConnectionId>4f35dc35-a079-4b92-8dab-869cebd9f87f</SinkConnectionId> <SinkId>c7014d11-2fee-4cf8-ace0-e8210f9f15fa</SinkId> <SourceConnectionId>740c9fb2-22ce-4241-9f20-c7949245b612</SourceConnectionId> <SourceId>f90b2240-df82-4243-9707-a8c6eec829ad</SourceId> </PersistentDesignerObjectBase> <PersistentDesignerObjectBase i:type=""PersistentDesignerConnection""> <ExpressionName i:nil=""true"" /> <FunctionName i:nil=""true"" /> <Height>0</Height> <Id>cd44b0da-77b6-4cd5-8d3e-c324f1f6492f</Id> <Left>0</Left> <Top>0</Top> <Type>Connection</Type> <Width>0</Width> <SinkConnectionId>7542e863-fe56-4b55-b358-ae8473642b96</SinkConnectionId> <SinkId>c7014d11-2fee-4cf8-ace0-e8210f9f15fa</SinkId> <SourceConnectionId>d3a1e978-1a5b-48d4-a41f-e221e39d1a48</SourceConnectionId> <SourceId>f90b2240-df82-4243-9707-a8c6eec829ad</SourceId> </PersistentDesignerObjectBase> </Expression> <ExpressionScript i:nil=""true"" /> <Type>DesignerBased</Type> </ExpressionContainer> </designer> </Map> <SchedulerDescriptor> <Schedule name=""Schedule0"" isActive=""true"" description=""Description"" startOn=""2011-11-18T00:00:00+02:00"" endOn=""2011-11-18T00:00:00+02:00""> <DailyPattern repeatEveryWeekday=""false"" repeatEveryNDay=""1"" /> <DailyFrecuencyOneTimePerDay timeOfDay=""0"" /> </Schedule> </SchedulerDescriptor> </SyncProcess> "); }
public ActionResult Dispatch(int[] packageIDs, int?method, string tracking) { AjaxResult result = new AjaxResult(); try { if (!packageIDs.Any()) { throw new Exception("沒有給訂單!"); } int warehouseID = 0; if (!int.TryParse(Session["warehouseId"].ToString(), out warehouseID)) { throw new Exception("找不到出貨倉!"); } SC_WebService SCWS = new SC_WebService(Session["ApiUserName"].ToString(), Session["ApiPassword"].ToString()); if (!SCWS.Is_login) { throw new Exception("SC is not login"); } Packages = new GenericRepository <Packages>(db); IRepository <Box> Box = new GenericRepository <Box>(db); IRepository <DirectLineLabel> Label = new GenericRepository <DirectLineLabel>(db); TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask("Dropship DL 訂單 Dispatch"); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { TimeZoneConvert timeZoneConvert = new TimeZoneConvert(); List <Packages> dispatchList = new List <Packages>(); List <string> errorList = new List <string>(); List <Packages> packageList = db.Packages.AsNoTracking().Where(p => p.IsEnable.Value && packageIDs.Contains(p.ID)).ToList(); DirectLine directLine = db.DirectLine.Find(packageList[0].Method.DirectLine); string boxID = string.Format("{0}-{1}", directLine.Abbreviation, timeZoneConvert.Utc.ToString("yyyyMMdd")); int count = db.Box.Where(b => b.IsEnable && b.DirectLine.Equals(directLine.ID) && b.BoxID.Contains(boxID)).Select(b => b.MainBox).Distinct().Count() + 1; byte[] Byte = BitConverter.GetBytes(count); Byte[0] += 64; boxID = string.Format("{0}-{1}", boxID, System.Text.Encoding.ASCII.GetString(Byte.Take(1).ToArray())); foreach (Packages package in packageList) { DirectLineLabel label = package.Label; OrderData order = SCWS.Get_OrderData(package.OrderID.Value); if (CheckOrderStatus(package, order.Order)) { ThreadTask uploadPOTask = new ThreadTask(string.Format("直發商待出貨區 - 更新訂單【{0}】以及PO【{1}】資料至SC", package.OrderID, package.POId), session); lock (factory) { uploadPOTask.AddWork(factory.StartNew(() => { uploadPOTask.Start(); string error = ""; try { SyncProcess Sync = new SyncProcess(session, factory); error = Sync.Update_PurchaseOrder(package.ID, false); if (string.IsNullOrEmpty(error)) { //if (directLine.Abbreviation.Equals("ECOF")) //{ // ThreadTask SyncTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); // SyncTask.AddWork(factory.StartNew(() => // { // SyncTask.Start(); // SyncProcess sync = new SyncProcess(session); // return sync.Update_Tracking(package); // })); //} //else //{ // foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) // { // if (item.SerialNumbers.Any()) SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); // } //} foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) { if (item.SerialNumbers.Any()) { SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); } } } } catch (Exception e) { error = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(error); })); } package.ProcessStatus = (int)EnumData.ProcessStatus.已出貨; package.BoxID = label.BoxID = boxID; label.Status = (byte)EnumData.LabelStatus.正常; dispatchList.Add(package); } else { MyHelp.Log("DirectLineLabel", label.LabelID, string.Format("標籤【{0}】狀態異常", label.LabelID), session); package.Orders.StatusCode = (int)order.Order.StatusCode; package.Orders.PaymentStatus = (int)order.Order.PaymentStatus; label.Status = (byte)EnumData.LabelStatus.鎖定中; if (order.Order.StatusCode.Equals((int)OrderStatusCode.Canceled)) { label.Status = (byte)EnumData.LabelStatus.作廢; SerialNumbers = new GenericRepository <SerialNumbers>(db); foreach (var ss in SerialNumbers.GetAll().Where(s => s.OrderID.Equals(package.OrderID))) { SerialNumbers.Delete(ss); } ; } errorList.Add(string.Format("標籤【{0}】狀態異常,請重新取出!", package.OrderID.Value)); } Packages.Update(package, package.ID); Label.Update(label, label.LabelID); } if (dispatchList.Any()) { Box box = new Box() { IsEnable = true, BoxID = boxID, MainBox = boxID, DirectLine = directLine.ID, FirstMileMethod = method ?? 0, WarehouseFrom = warehouseID, ShippingStatus = method.HasValue ? (byte)EnumData.DirectLineStatus.運輸中 : (byte)EnumData.DirectLineStatus.已到貨, BoxType = (byte)EnumData.DirectLineBoxType.DirectLine, TrackingNumber = tracking, Create_at = timeZoneConvert.Utc }; db.Entry(box).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); MyHelp.Log("Box", boxID, string.Format("Box【{0}】建立成功", boxID), session); MyHelp.Log("Box", box.BoxID, string.Format("寄送 Box【{0}】DL資料", box.BoxID), session); SendMailToCarrier(box, db.DirectLine.AsNoTracking().First(d => d.ID.Equals(box.DirectLine))); MyHelp.Log("Box", box.BoxID, string.Format("Box【{0}】完成出貨", box.BoxID), session); } Packages.SaveChanges(); if (errorList.Any()) { message = string.Join("\n", errorList.ToArray()); } } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } catch (Exception e) { result.status = false; result.message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(Json(result, JsonRequestBehavior.AllowGet)); }
public void Receive() { try { using (LinkReceive receive = new LinkReceive(HttpContext.Request.Url.Query)) { CaseEvent eventData = db.CaseEvent.AsNoTracking().FirstOrDefault(c => c.ID.Equals(receive.CaseID)); if (eventData == null) { throw new Exception("找不到Case Event!"); } if (!eventData.Status.Equals((byte)EnumData.CaseEventStatus.Open)) { throw new Exception("執行動作無效!"); } Packages package = db.Packages.AsNoTracking().FirstOrDefault(p => p.IsEnable.Value && p.ID.Equals(eventData.PackageID)); if (package == null) { throw new Exception("找不到訂單!"); } using (CaseLog CaseLog = new CaseLog(package, Session)) { Label = new GenericRepository <DirectLineLabel>(db); TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; switch (receive.Type) { case (byte)EnumData.CaseEventType.CancelShipment: if (!receive.Request.Equals((byte)EnumData.CaseEventRequest.Failed) && !receive.ReturnWarehouseID.HasValue) { throw new Exception("沒有選擇退貨倉!"); } CaseLog.CancelShipmentResponse(receive.Request, receive.ReturnWarehouseID); eventData = CaseLog.GetCaseEvent(EnumData.CaseEventType.CancelShipment); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Locked)) { ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】同步資料", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Sync_Order(package.OrderID.Value)); })); DirectLineLabel label = db.DirectLineLabel.AsNoTracking().First(l => l.IsEnable && l.LabelID.Equals(eventData.LabelID)); label.Status = (byte)EnumData.LabelStatus.作廢; Label.Update(label, label.LabelID); Label.SaveChanges(); } break; case (byte)EnumData.CaseEventType.UpdateShipment: CaseLog.UpdateShipmentResponse(receive.Request); break; case (byte)EnumData.CaseEventType.ChangeShippingMethod: eventData = CaseLog.ChangeShippingMethodResponse(receive.Request); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Close)) { package = db.Packages.Find(eventData.PackageID); if (!string.IsNullOrEmpty(package.TrackingNumber)) { ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Update_Tracking(package)); })); } } break; case (byte)EnumData.CaseEventType.ResendShipment: eventData = CaseLog.ResendShipmentResponse(receive.Request); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Close)) { DirectLineLabel label = db.DirectLineLabel.AsNoTracking().First(l => l.IsEnable && l.LabelID.Equals(eventData.NewLabelID)); package = db.Packages.AsNoTracking().First(p => p.ID.Equals(label.PackageID)); if (!string.IsNullOrEmpty(package.TrackingNumber)) { label.Status = (byte)EnumData.LabelStatus.完成; ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Update_Tracking(package)); })); } Label.Update(label, label.LabelID); Label.SaveChanges(); } break; case (byte)EnumData.CaseEventType.ReturnPackage: CaseLog.ReturnPackageResponse(receive.Request); break; } } } Response.Write("Success!"); } catch (Exception e) { Response.Write(e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message); } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// protected virtual void Dispose (bool disposing) { if (disposing) { if (m_process != null) { m_process.Dispose (); m_process = null; } if (m_exitMutex != null) { m_exitMutex.Dispose (); m_exitMutex = null; } } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void Start () { m_startTicks = Environment.TickCount; m_lastOutputTimestamp = m_startTicks; m_exitMutex = new ManualResetEvent (false); m_process = new SyncProcess (); m_process.StartInfo = StartInfo; m_process.OutputDataReceived += new DataReceivedEventHandler (ProcessStdout); m_process.ErrorDataReceived += new DataReceivedEventHandler (ProcessStderr); m_process.Exited += new EventHandler (ProcessExited); m_process.EnableRaisingEvents = true; LoggingUtils.Print (string.Format ("[SyncRedirectProcess] Start: {0} (Args=\"{1}\" Pwd=\"{2}\")", m_process.StartInfo.FileName, m_process.StartInfo.Arguments, m_process.StartInfo.WorkingDirectory)); m_process.Start (); m_process.BeginOutputReadLine (); m_process.BeginErrorReadLine (); }