/// <summary> /// 构造函数 /// </summary> /// <param name="UserID"></param> /// <param name="url"></param> public SynchronousController(string userID, string url) { TextDoc = new TextDoc(); this.Url = url; MessageQueues = new MessageHolder(); Watcher = new MessageWatcher(MessageQueues, url); UserID = userID; }
/// <summary> /// 处理DEL消息 /// </summary> /// <param name="callerID"></param> /// <param name="lineHash"></param> /// <param name="sc"></param> public static void DoDel(string callerID, int lineHash, SynchronousController sc) { TextDoc textDoc = sc.TextDoc; int index = textDoc.GetIndexByHash(lineHash); textDoc.DeleteLine(textDoc.GetLineByHash(lineHash)); sc.ToDeleteLine(index); sc.MessageQueues.MessagesToSend.Enqueue(MessageWrapper.WriteMsg(callerID, sc.Identity, MessageType.VRF, lineHash, "DEL")); }
/// <summary> /// 添加新行事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <returns></returns> bool AddNewLineEvent(object sender, AddNewLineEventArgs e) { if (this.TextDoc.InsertLine(TextDoc.GetTextLineByIndex(e.TargetLineIndex), out TextLine newLine)) { newLine.EditContent(e.NewLineContent); MessageQueues.MessagesToSend.Enqueue(MessageWrapper.WriteMsg(this.CallerID, this.Identity, MessageType.ADD, newLine.ID, e.NewLineContent)); return(true); } else { return(false); } }
public void Convert_text() { var text = @"Предложения по данным позициям из заказа отсутствуют адрес доставки тестовый адрес доставки 27131 прайс-лист Тестовый поставщик минимальный заказ 17948 АМИНАЗИН р-р д/ин. (амп.) 2.5% - 1 мл N10 - CANPOL 385882399: имеется различие в цене препарата (старая цена: 5 155,25р.; новая цена: 3 803,59р.) АЛКЕРАН лиоф. пор. д/ин. (амп.) 50 мг N1 - CANPOL 272172924: имеется различие в цене препарата (старая цена: 1 963,27р.; новая цена: 7 846,26р.) АМИНАЗИН р-р д/ин. (амп.) 2.5% - 1 мл N10 1362470529 - CANPOL 2032824958: имеется различие в цене препарата (старая цена: 5 215,45р.; новая цена: 8 891,76р.) АЛКЕРАН лиоф. пор. д/ин. (амп.) 50 мг N1 795399701 - CANPOL 1413518865: имеется различие в цене препарата (старая цена: 5 211,38р.; новая цена: 6 772,29р.) АЛКА-ЗЕЛЬТЦЕР табл. шип. N10 - CANPOL 812196717: имеется различие в цене препарата (старая цена: 3 806,94р.; новая цена: 1 724,41р.) АЛКЕРАН табл. 2 мг N25 - CANPOL 814314867: имеется различие в цене препарата (старая цена: 4 155,58р.; новая цена: 5 851,08р.) АЛЛЕРГЕНЫ ПЫЛЬЦЕВЫЕ в комплектах - CANPOL 905024831: имеется различие в цене препарата (старая цена: 456,32р.; новая цена: 7 283,92р.)"; var model = new TextDoc("тест", text); var doc = model.ToFlowDocument(); Assert.That(WpfTestHelper.FlowDocumentToText(doc), Does.Contain("АЛЛЕРГЕНЫ ПЫЛЬЦЕВЫЕ")); }
/// <summary> /// 删除行事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <returns></returns> bool DeleteLineEvent(object sender, DeleteLineEventArgs e) { TextLine targetLine = TextDoc.GetTextLineByIndex(e.TargetLineIndex); if (targetLine == null) { return(false); } if (this.TextDoc.MarkDeleteLine(targetLine)) { MessageQueues.MessagesToSend.Enqueue(MessageWrapper.WriteMsg(this.CallerID, this.Identity, MessageType.DEL, targetLine.ID, null)); return(true); } else { return(false); } }
/// <summary> /// 编辑行事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <returns></returns> bool ModifyLineEvent(object sender, ModifyLineEventArgs e) { if (TextDoc.GetLineCounts() > e.TargetLineIndex || e.TargetLineIndex <= 0) { return(false); } else { TextLine targetLine = this.TextDoc.GetTextLineByIndex(e.TargetLineIndex); if (targetLine == null) { return(false); } targetLine.EditContent(e.NewContent); targetLine.Mark = LineMarkType.Changed; MessageQueues.MessagesToSend.Enqueue(MessageWrapper.WriteMsg(this.CallerID, this.Identity, MessageType.UPD, targetLine.ID, e.NewContent)); return(true); } }
/// <summary> /// 向服务器申请一个同步session,并上传初始文本 /// </summary> /// <param name="rawText"></param> /// <returns>如果成功则返回真</returns> private Boolean ApplySession(string rawText) { TextDoc rawDoc = new TextDoc(rawText); Queue <Message> applyMsgs = new Queue <Message>(); foreach (TextLine textLine in rawDoc.TextLines) { if (textLine.Mark != LineMarkType.Head) { Message msg = MessageManager.MessageWrapper.IniMsg(CallerID, textLine.ID, textLine.GetContent()); applyMsgs.Enqueue(msg); } } Message applyMsg = MessageManager.MessageWrapper.ApplyMsg(CallerID); applyMsgs.Enqueue(applyMsg); Boolean isDone = HttpHelper.RequestForIniMsg(Url, applyMsgs, MessageQueues); return(isDone); }
public IEnumerator <Text> GetEnumerator() { return(TextDoc.GetEnumerator()); }