ldj/epick/LightSeviceHostForm.cs

537 lines
16 KiB
C#
Raw Normal View History

2023-05-23 16:13:17 +08:00
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
{
static log4net.ILog log = log4net.LogManager.GetLogger("light");
private ServiceHost host = null;
public static List<ELabel> labelPool = new List<ELabel>();
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<ELabel> lables)
{
labelPool = labelPool.Union(lables).ToList<ELabel>();
labelPool = labelPool.Concat(lables).ToList<ELabel>();
}
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<ELabel> 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<SeedsItem> seeds = new List<SeedsItem>();
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<SeedsItem> ));
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<ELight> 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<ELight> 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);
}
}
*/
int baseLightId = 5000;
int currentPort = 11;
bool turnOnLights(int portNo, List<ELight> lights)
{
if (portNo == 0)
{
portNo = currentPort;
}
// bool rt=false;
List<ELight> fail = new List<ELight>();
log.Debug("start light on request ------>");
foreach (ELight el in lights)
{
channel_led id = new channel_led();
id.channel_id = baseLightId + el.lightId;
//id.config_word = led_rgb;
id.color = el.which;
id.state = 1;
if (el.port == 0)
{
el.port = portNo;
}
if (!pick.turnOnLight(el.port, id))
{
log.Debug(getJson(el) + " light on failed. redo...");
fail.Add(el);
}
else
{
log.Debug(getJson(el));
}
Thread.Sleep(50);
}
if (fail.Count > 0)
{
turnOnLights(portNo, fail);
}
log.Debug("<----------- end light on request ");
return fail.Count == 0;
}
bool turnOffLights(int portNo, List<ELight> lights)
{
if (portNo == 0)
{
portNo = currentPort;
}
bool rt = false;
List<ELight> fail = new List<ELight>();
log.Debug("start light off request ------>");
foreach (ELight el in lights)
{
channel_led id = new channel_led();
id.channel_id = baseLightId + el.lightId;
//id.config_word = led_rgb;
id.color = el.which;
id.state = 1;
if (el.port == 0)
{
el.port = portNo;
}
if (!pick.turnOffLight(el.port, id))
{
log.Debug(getJson(el) + " light off failed. redo...");
fail.Add(el);
}
else
{
log.Debug(getJson(el));
}
Thread.Sleep(50);
}
if (fail.Count > 0)
{
turnOffLights(portNo, fail);
}
log.Debug("<----------- end light off request ");
return fail.Count == 0;
}
public string getJson(ELight light)
{
string json = "";
json = String.Format("\"lightId\":{0},\"which\":{1}, \"port\":{2}"
, light.lightId, light.which, light.port);
return "{" + json + "}";
}
}
}