using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.ServiceModel; using DeiNiu.Utils; using System.ServiceModel.Description; using System.Net; using System.Runtime.Serialization.Json; using System.IO; using System.Threading; using elelab; using dn_wms; using Model; namespace DeiNiu.wms.win { public partial class LightSeviceHostForm : BasicRibbonForm { private ServiceHost host = null; public static List labelPool = new List(); string svrUrl = "http://127.0.0.1:9998/DNLight"; public LightSeviceHostForm() { InitializeComponent(); // startHost(); //startHost2(); elelab.pick.init_port(enumLabelPickType.seed); Thread threadPreProcess = new Thread(startHost2); threadPreProcess.IsBackground = true; threadPreProcess.Start(); } void startHost() { ServiceLight service = new ServiceLight(); service.newLabels += this.newLabels; service.lightUp += this.lightUp; host = new ServiceHost(service); host.Open(); } delegate void showStatus(); void startHost2() { // lbStatus.Text = "服务启动失败"; try { svrUrl = System.Configuration.ConfigurationManager.AppSettings["BaseUri"]; Uri baseAddress = new Uri(svrUrl); ServiceLight service = new ServiceLight(); service.newLabels += this.newLabels; service.lightUp += this.lightUp; service.turnOff += this.turnOff; service.turnOnLts += this.turnOnLights; service.turnOffLts += this.turnOffLights; host = new ServiceHost(service, baseAddress); elelab.pick.lightOffEvent += testPicked; WebHttpBinding binding = new WebHttpBinding(); ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IServiceLight), binding, baseAddress); WebHttpBehavior httpBehavior = new WebHttpBehavior(); endpoint.Behaviors.Add(httpBehavior); host.Opened += delegate { if (InvokeRequired) { this.Invoke(new showStatus(delegate() { lbStatus.Text = "服务已启动"; lbUrl.Text = svrUrl; })); } else { lbStatus.Text = "服务已启动"; lbUrl.Text = svrUrl; // lbStatus.Text = "服务启动失败"; // lbUrl.Text =""; } }; host.Open(); } catch (Exception e) { MessageBox.Show("启动服务失败: "+e.Message); } } void testPicked(int eleId, int port, int eleAddress, int count) { if (InvokeRequired) { this.Invoke(new showStatus(delegate() { showResult(eleId, port, eleAddress, count); })); } else { showResult(eleId, port, eleAddress, count); } } void showResult(int eleId, int color, int eleAddress, int count) { lbreturn.Text = string.Format("标签ID:{0} \n\n 端口:{1} \n\n 地址:{2} \n\n 数量:{3}", eleId, color, eleAddress, count); } void newLabels(List lables) { labelPool = labelPool.Union(lables).ToList(); labelPool = labelPool.Concat(lables).ToList(); } System.Timers.Timer timer = new System.Timers.Timer();//实例化Timer类 private void initialTimer() { int intTime = 5000; timer.Interval = intTime;//设置间隔时间,为毫秒; timer.Elapsed += new System.Timers.ElapsedEventHandler(lightUp);//到达时间的时候执行事件; timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; timer.Start(); } void lightUp(object source, System.Timers.ElapsedEventArgs e) { if (labelPool.Count == 0) { return; } ELabel lb = labelPool[0]; int[] ids = new int[] { lb.labelId }; string[] ele_address = new string[] { lb.address.ToString() }; elelab.pick.init_port(enumLabelPickType.seed); // string result = elelab.pick.send_data_pick(null, enumLabelPickType.pick); bool result = elelab.pick.lightLabels2(labelPool,1,1, enumLabelPickType.seed); if (result) { labelPool.Remove(lb); } } void lightUp(List lables,int portNo) { //to lightup #if DEBUG // portNo = 13; #endif int[] ids = new int[lables.Count] ; string[] ele_address = new string[lables.Count]; for(int i=0; i< lables.Count;i++ ) { ids[i] = lables[i].labelId; ele_address[i] = lables[i].address.ToString(); } elelab.pick.init_port(enumLabelPickType.seed); elelab.pick.lightLabels2(lables, portNo,1,enumLabelPickType.seed); } #region a private void insertTestData() { string url = svrUrl + "/uploadSeeds"; try { // #region JosnPost List seeds = new List(); int maxLbId = 1; int k = 0; for (int i = 401; i < 800; i++) { SeedsItem si = new SeedsItem(); si.count = i * 9 +1; si.custOrder = "CO" + i * 100 / 3 + 1; si.seedsNo = "seedsNo0" + (i / maxLbId + 1); if (k >= maxLbId) { k = 0; } k++; si.elabId = k; si.barcode = k / 5 + 1+ ""; si.deskId = 1; si.itemName = "name" + si.barcode; si.port = si.deskId; si.unit = "each"; seeds.Add(si); } DataContractJsonSerializer dcSerializer = new DataContractJsonSerializer(typeof(List )); MemoryStream stream = new MemoryStream(); dcSerializer.WriteObject(stream, seeds); string data = Encoding.UTF8.GetString(stream.ToArray(), 0, (int)stream.Length); //HttpClient client = new HttpClient(); //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); string link = url; //HttpResponseMessage respondse = await client.PostAsync(link, new StringContent(data)); //string dataWithJason = await respondse.Content.ReadAsStringAsync(); var request = (HttpWebRequest)WebRequest.Create(new Uri(link)); request.ContentType = "application/json"; request.Method = "POST"; var requestStream = request.GetRequestStream(); using (var writer = new StreamWriter(requestStream)) { writer.Write(data); writer.Flush(); } /*using (var resp = request.GetResponse()) { using (var responseStream = resp.GetResponseStream()) { var reader = new StreamReader(responseStream); var result = reader.ReadToEnd(); } }*/ HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string json = null; using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"))) { json = reader.ReadToEnd(); } // WebResponse response = request.GetResponse(); // string json = null; // using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"))) { // json = reader.ReadToEnd(); } /* using (var requestStream = await request.GetRequestStreamAsync()) { var writer = new StreamWriter(requestStream); writer.Write(data); writer.Flush(); } using (var resp = await request.GetResponseAsync()) { using (var responseStream = resp.GetResponseStream()) { var reader = new StreamReader(responseStream); var result = reader.ReadToEnd(); } }*/ /* HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@url); request.ContentType = "application/json"; request.Method = "POST"; string inputString = data;//"{\"Key\":\"ABCDEFG\"}"; Byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(inputString); request.ContentLength = byteArray.Length; Stream rstream = request.GetRequestStream(); rstream.Write(byteArray, 0, byteArray.Length); rstream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streams = response.GetResponseStream(); StreamReader SR = new StreamReader(streams); String info = SR.ReadToEnd(); SR.Dispose(); */ MessageBox.Show("导入成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion private void btnLightSeeds_Click(object sender, EventArgs e) { } private void LightSeviceHostForm_FormClosing(object sender, FormClosingEventArgs e) { turnOffLights(); if (host != null) { host.Close(); } } void turnOff(int portNo) { if (unart_manage.com_manage[portNo] == null) { return; } Model.dis_id id; //id.ele_id = Convert.ToInt16(new_id.Text); id.order = 1; id.ele_id = 65535; id.state = 1; unart_manage.com_manage[portNo].init_port.write_clear_comment(id); } void turnOffLights() { Model.dis_id id; //id.ele_id = Convert.ToInt16(new_id.Text); id.order = 1; id.ele_id = 65535; id.state = 1; //id. foreach (int port in pick.activeComports)//WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS.Keys) { if (port == 0) { continue; } // unart_manage.com_manage[port].write_reset_device(); 复位各个硬件,通道灯,标签。。。 unart_manage.com_manage[port].init_port.write_clear_comment(id); } } private void simpleButton1_Click(object sender, EventArgs e) { insertTestData(); } private void simpleButton1_Click_1(object sender, EventArgs e) { insertTestData(); } void turnOnLights( int portNo,List lights ) { foreach(ELight el in lights){ channel_led id =new channel_led(); id.channel_id = el.lightId; //id.config_word = led_rgb; id.color = el.color; id.state = 1; bool rt= pick.turnOnLight(portNo, id); } } void turnOffLights(int portNo, List lights) { foreach (ELight el in lights) { channel_led id = new channel_led(); id.channel_id = el.lightId; //id.config_word = led_rgb; id.state = 1; pick.turnOffLight(portNo, id); } } } }