///// <summary> ///// 获取指定采购单明细 ///// </summary> ///// <param name="code"></param> ///// <param name="PackUnit"></param> ///// <param name="PackQty"></param> ///// <param name="bill"></param> ///// <param name="msg"></param> ///// <returns></returns> //public static bool GetBill(int ToSerialNo, out DBJhBill bill, out string msg) //{ // SQLiteDataReader rd; // if (!DBTool.Select(" ToSerialNo=@ToSerialNo ", new DBJhBill() { ToSerialNo = ToSerialNo }, string.Empty, out rd, out msg)) // { // bill = null; // return false; // } // if (rd.Read()) // { // int i; // if(!GetMaxSerialNo(out i,out msg)) // { // //取SerialNo失败 // rd.Close(); // bill = null; // return false; // } // bill = new DBJhBill(); // bill.ID = new Guid(Convert.ToString(rd["ID"])); // bill.Barcode = Convert.ToString(rd["Barcode"]); // bill.BillNo = Convert.ToString(rd["BillNo"]); // bill.CgCount = Convert.ToDecimal(rd["CgCount"]); // bill.Checked = Convert.ToString(rd["Checked"]); // bill.LrDate = Convert.ToDateTime(rd["LrDate"]); // bill.LrUser = Convert.ToString(rd["LrUser"]); // bill.CgPackCount = Convert.ToDecimal(rd["CgPackCount"]); // bill.SsPackCount = Convert.ToDecimal(rd["SsPackCount"]); // bill.PackQty = Convert.ToDecimal(rd["PackQty"]); // bill.PackUnit = Convert.ToString(rd["PackUnit"]); // bill.PluCode = Convert.ToString(rd["PluCode"]); // bill.PluID = Convert.ToString(rd["PluID"]); // bill.PluName = Convert.ToString(rd["PluName"]); // bill.SerialNo = i++; // bill.ToSerialNo = Convert.ToInt16(rd["ToSerialNo"]); // bill.CgSGLCount = Convert.ToDecimal(rd["CgSGLCount"]); // bill.SsSGLCount = Convert.ToDecimal(rd["SsSGLCount"]); // bill.Spec = Convert.ToString(rd["Spec"]); // bill.SsCount = Convert.ToDecimal(rd["SsCount"]); // bill.Unit = Convert.ToString(rd["Unit"]); // return true; // } // else // { // msg = "未查询到采购信息"; // bill = null; // return false; // } //} /// <summary> /// 获取指定采购单明细 /// </summary> /// <param name="packet"></param> /// <param name="bill"></param> /// <param name="msg"></param> /// <returns></returns> public static bool GetBill(string Code, TPacket packet, out DBJhBill bill, out string msg) { SQLiteDataReader rd; if (!DBTool.Select("PluCode=@PluCode And PackQty=@PackQty And PackUnit=@PackUnit", new DBJhBill() { PluCode = Code, PackQty = decimal.Parse(packet.PACKQTY), PackUnit = packet.PACKUNIT }, string.Empty, out rd, out msg)) { bill = null; return(false); } ICollection <DBJhBill> list = ObjTool.BuildObject <DBJhBill>(rd); rd.Close(); if (list.Count > 0) { bill = list.First(); return(true); } else { msg = "未查询到采购信息"; bill = null; return(false); } }
public TPacket Receive <TPacket>() where TPacket : APacket, new() { TPacket packet = new TPacket(); Receive(packet); return(packet); }
protected IObservable <TPacket> Filter <TPacket>() where TPacket : IPacketV2 <IPayload>, new() { var id = new TPacket().MessageId; return(FilterVehiclePackets.Where(_ => _.MessageId == id).Cast <TPacket>()); }
public async Task <TPacket> ReceiveAsync <TPacket>() where TPacket : APacket, new() { TPacket packet = new TPacket(); await ReceiveAsync(packet); return(packet); }
protected void PaintTracking(Graphics g) { TPacket p = _tPacket; TPacketM1 p1 = p as TPacketM1; TPacketM2 p2 = p as TPacketM2; if (p == null) { return; } // coordinates depend on the resolution mode of the camera, but also require doubling in the X-axis Rectangle r = FrameRectangle; // Tracking box g.DrawRectangle(SystemPens.ControlDarkDark, r); Brush objectBrush = new SolidBrush(TrackColor); Brush centreBrush = TrackColor.GetBrightness() > 0.5 ? Brushes.Black : Brushes.White; Rectangle trackingRectangle = TransformRect(p.Rectangle); Point centroid = TransformPoint(p.Centroid); g.FillRectangle(objectBrush, trackingRectangle); g.FillRectangle(centreBrush, centroid.X - 1, centroid.Y - 1, 3, 3); ////////////////////////////////////////////// if (p2 != null) { int y = 0; foreach (TPacketM2Row row in p2.Rows) { Rectangle line = TransformRect(new Rectangle(row.Min, y, row.Max - row.Min, 1)); Rectangle avg = TransformRect(new Rectangle(row.Mean, y, 1, 1)); g.FillRectangle(Brushes.Orange, line); g.FillRectangle(Brushes.White, avg); // TODO: display confidence and pixel count? y++; } } else if (p1 != null) { using (Bitmap bmp = p1.ToBitmap()) { g.DrawImage(bmp, FrameRectangle); } } String text = String.Format("Confidence: {0}\nPixel Count: {1}", p.Confidence, p.PixelCount); g.DrawString(text, SystemFonts.IconTitleFont, SystemBrushes.ControlText, 5, r.Y + r.Height + 5); }
public virtual TPacket Get <TPacket>() where TPacket : APacket, new() { int length = 0; foreach (byte b in Read(_size).Span) { length <<= 8; length |= b; } TPacket packet = new TPacket(); packet.Write(Read(length)); return(packet); }
/// <summary> /// 从单据中获取Plu信息 /// </summary> /// <param name="code"></param> /// <param name="plus"></param> /// <param name="msg"></param> /// <returns></returns> public static bool QueryPluFromBill(string code, out List <TRFQueryPlu> plus, out string msg) { SQLiteDataReader rd; if (!DBTool.Select(" Barcode=@Barcode Or PluCode=@PluCode ", new DBJhBill() { Barcode = code, PluCode = code }, string.Empty, out rd, out msg)) { plus = null; return(false); } plus = new List <TRFQueryPlu>(); while (rd.Read()) { if (plus.Count == 0) { //添加当前商品 TRFQueryPlu plu = new TRFQueryPlu(); plu.BARCODE = Convert.ToString(rd["Barcode"]); plu.PLUCODE = Convert.ToString(rd["PluCode"]); plu.PLUID = Convert.ToString(rd["PluID"]);; plu.PLUNAME = Convert.ToString(rd["PluName"]); plu.SPEC = Convert.ToString(rd["Spec"]); plu.UNIT = Convert.ToString(rd["Unit"]); plu.Packets = new List <TPacket>(); plus.Add(plu); } if (Convert.ToDecimal(rd["PackQty"]) != 0) { TPacket packet = new TPacket(); packet.PACKETID = Convert.ToInt16(rd["ToSerialNo"]).ToString();//将SerialNo当作包装ID packet.PACKQTY = Convert.ToDecimal(rd["PackQty"]).ToString("F2"); packet.PACKUNIT = Convert.ToString(rd["PackUnit"]); plus[0].Packets.Add(packet); } } rd.Close(); if (plus.Count > 0) { return(true); } else { msg = "采购单中未找到该商品。"; plus = null; return(false); } }
Option <TPacket> TryRecvNoLock <TPacket>() where TPacket : IPacket, new() { var queue = commonQueue; var dummy = new TPacket(); var expectedType = dummy.Type; for (var i = 0; i < queue.Count; i++) { var packet = queue[i]; if (packet.Type == expectedType) { queue.RemoveAt(i); return(Option.Some((TPacket)packet)); } } return(Option.None <TPacket>()); }
private void cbxPackSpec_SelectedValueChanged(object sender, EventArgs e) { string msg; TPacket packet = (TPacket)cbxPackSpec.SelectedItem; if (PubGlobal.JhBillInfo.IsCgJh) { //数据库读取Model if (!JhBillDAL.GetBill(PubGlobal.Cur_TRFQueryPlu[0].PLUCODE, packet, out PubGlobal.JhBillModel, out msg)) { MessageBox.Show(msg); } } else { //数据库读取Model if (!JhBillDAL.GetBill(PubGlobal.Cur_TRFQueryPlu[0].PLUCODE, packet, out PubGlobal.JhBillModel, out msg)) { //新建Model if (!NewModel()) { MessageBox.Show("新建单据明细失败"); return; } } } //tbCgPackCount.Text = jhBillModel.CgPackCount.ToString(); //tbCgSglCount.Text = jhBillModel.CgSGLCount.ToString(); tbCgPackCount.Text = PubGlobal.JhBillModel == null ? "0" : PubGlobal.JhBillModel.CgPackCount.ToString(); tbCgSglCount.Text = PubGlobal.JhBillModel == null ? "0" : PubGlobal.JhBillModel.CgSGLCount.ToString(); tbSsPackCount.Text = PubGlobal.JhBillModel == null ? "0" : PubGlobal.JhBillModel.SsPackCount.ToString(); tbSsSglCount.Text = PubGlobal.JhBillModel == null ? "0" : PubGlobal.JhBillModel.SsSGLCount.ToString(); if (string.IsNullOrEmpty(PubGlobal.JhBillModel.ScDate)) { cbHasProductDate.Checked = false; } else { cbHasProductDate.Checked = true; dpProductDate.Value = DateTime.Parse(PubGlobal.JhBillModel.ScDate); } }
public async Task <Option <TPacket> > Recv <TPacket>() where TPacket : IPacket, new() { var tryCount = 1000; for (int i = 0; i < tryCount; i++) { var found = TryRecv <TPacket>(); if (found.HasValue) { return(found); } await Task.Delay(TimeSpan.FromMilliseconds(100)); } var dummy = new TPacket(); var expectedType = dummy.Type; log.Warn($"timeout : expected packet type: {expectedType}"); return(Option.None <TPacket>()); }
// TODO: 패킷 프로토콜 종류를 모은 그룹(클래스?, 구조체?) 구현 // 수신한 데이터를 TPacket의 한 단위로 뽑아낸 후 이것을 모아 놓은 Q타입의 m_PackQueue에 담는다. // 수신한 패킷을 처리하는 전용 스레드에서 m_PackQueue에 담긴 패킷들을 추출하여 하나씩 처리한다. // Q에 담고 이를 다시 추출하여 // TODO: 패킷 프로토콜 종류별 처리 함수 구현(종류별로 별도 파일 생성) // 이런 패킷 프로토콜 처리기를 한 곳에 수집하여 처리기가 필요할 때 꺼내서 사용할 수 있도록 한다. // TODO: 패킷 처리기 구현 public void ProcessPacket( TPacket Packet ) { // TODO: 이하 코드를 본 프로젝트에 맞게 수정할 것(변수명도 적절히 변경할 것) object ProtocolObj = null; Type ProtocolType = null; IProtocolBase TargetPacket = null; Dictionary<int, Type> Protocols = ProtocolNoList.GetProtocolNoDict(); if( null == Protocols ) return; if( Protocols.TryGetValue( Packet.Protocol, out ProtocolType ) ) { ProtocolObj = Activator.CreateInstance( ProtocolType ); if( ProtocolObj is IProtocolBase ) { TargetPacket = ProtocolObj as IProtocolBase; TargetPacket.Read( Packet ); } else { // TODO: Unknown pakcet 출력 // IProtocolBase 계열과 맞지 않는 ProtocolType형 객체(ProtocolObj)다. } // TODO: 패킷을 꺼내서 처리할 곳에서 m_PackQueue를 구현한다. lock( m_PackQueue ) { m_PackQueue.Enqueue( TargetPacket ); } } else { // TODO: Unknown packet 출력 // 관리되지 않은 Packet protocol이다. } }
/// <summary> /// 新建Model /// </summary> private bool NewModel() { if (PubGlobal.Cur_TRFQueryPlu == null || PubGlobal.Cur_TRFQueryPlu.Count == 0) { return(false); } PubGlobal.JhBillModel = new DBJhBill(); PubGlobal.JhBillModel.BillNo = string.Empty; PubGlobal.JhBillModel.Barcode = PubGlobal.Cur_TRFQueryPlu[0].BARCODE; PubGlobal.JhBillModel.Checked = "N"; PubGlobal.JhBillModel.LrDate = DateTime.Now; PubGlobal.JhBillModel.LrUser = PubGlobal.User.UserCode; TPacket packet = (TPacket)(cbxPackSpec.SelectedItem); PubGlobal.JhBillModel.PackQty = packet == null?0:decimal.Parse(packet.PACKQTY); PubGlobal.JhBillModel.PackUnit = packet == null?string.Empty:packet.PACKUNIT; PubGlobal.JhBillModel.PluCode = PubGlobal.Cur_TRFQueryPlu[0].PLUCODE; PubGlobal.JhBillModel.PluID = PubGlobal.Cur_TRFQueryPlu[0].PLUID; PubGlobal.JhBillModel.PluName = PubGlobal.Cur_TRFQueryPlu[0].PLUNAME; PubGlobal.JhBillModel.Spec = PubGlobal.Cur_TRFQueryPlu[0].SPEC; PubGlobal.JhBillModel.Unit = PubGlobal.Cur_TRFQueryPlu[0].UNIT; return(true); }
/// <summary> /// Writes packet size, id, and content using <see cref="IPacket.Write"/> and flushes this stream. /// </summary> public TPacket ReadPacket <TPacket>() where TPacket : struct, IPacket { TPacket packet; lock (_stream) { int length = ReadVarInt(); VarInt packetId = ReadVarInt(); packet = new TPacket(); if (packetId != packet.PacketID) { var discardedRestOfPacket = new byte[length - packetId.Bytes.Length]; _stream.Read(discardedRestOfPacket, 0, discardedRestOfPacket.Length); throw new InvalidDataException($"Expected packet 0x{packet.PacketID.Value:x2}, got 0x{packetId.Value:x2}."); } packet.Read(this); } return(packet); }
public void UpdateGSocket() { GSocket.OnSocketRead(); TPacket.Handle_Commands(ref GSocket.Cmds); }