protected List <byte> rxbuf = new List <byte>(); //串口接收缓冲 public virtual void ini(TX_CB tx, RX_CB rx, RX_BIN_CB rxbin) //初始化,注册回调函数 { tx_cb = tx; rx_cb = rx; rx_bin_cb = rxbin; //有插件,可做额外初始化 //…… }
static public DataSrc factory(Dictionary <string, object> v, RX_CB cb) //简单工厂 { string s = (string)v["type"]; Type t = Type.GetType("cslib.DataSrc_" + s); //数据源类的命名规则 var r = Activator.CreateInstance(t, cb) as DataSrc; r.fromDict(v); //初始化对象 return(r); }
static public DataSrc factory(DSType t, RX_CB cb) //工厂方法 { switch (t) { case DSType.uart: return(new DataSrc_uart(cb)); case DSType.udp: return(new DataSrc_udp(cb)); } return(null); }
public DataSrc_uart(RX_CB cb) : base(cb) { uart.DataReceived += (sender, e) => { int n = 0; byte[] buf = new byte[0]; try { n = uart.BytesToRead; buf = new byte[n]; uart.Read(buf, 0, n); } catch { } rx_event(buf); }; }
public IPEndPoint rmt_addr = new IPEndPoint(0, 0); //接收到数据后,对方的地址 public DataSrc_udp(RX_CB cb) : base(cb) { }
public string name = ""; //数据源的名称,如果是串口,则为串口号 public DataSrc(RX_CB cb) { rx_event = cb; }
static public DataSrc cur_ds; //当前数据源 static public void ini(RX_CB cb) //初始化默认的串口数据源 { cur_ds = factory(DSType.uart, cb); dsdict[DSType.uart] = cur_ds; }
public DataSrc_file(RX_CB cb) : base(cb) { name = "文件"; }
public DataSrc_replay(RX_CB cb) : base(cb) { name = "回放"; }