WebService.cs 3.8 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Activation;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using OnlineStore.Common;
using System.ServiceModel.Web;
using DeviceLibrary.ESS;
using CtuDeviceLib;

namespace OnlineStore.DeviceLibrary.ESS
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class WebService : IService
    {
        public ServerData1 cancelTask(Stream stream)
        {
            var result = new ServerData1();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            var essModel = JsonHelper.DeserializeJsonToObject<ESSTask>(s);
            if (TaskManager.CancelTask(essModel))
            {
                result.data.Add(essModel.taskDescribe.containerCode, "ok");
            }
            LogUtil.info($"收到任务取消:【{s}】【{JsonHelper.SerializeObject(result)}】");
            return result;
        }

        public ServerData1 createTask(Stream stream)
        {
            var result = new ServerData1();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            var essModel = JsonHelper.DeserializeJsonToObject<ESS_CreateTaskBody>(s);
            if ("tote_inbound".Equals(essModel.taskType))
            {
                foreach (var task in essModel.tasks)
                {
                    if(TaskManager.CreateInstoreTask(task))
                    {
                        result.data.Add(task.taskDescribe.containerCode, "ok");
                    }
                }
            }
            else if("tote_outbound".Equals(essModel.taskType))
            {
                foreach (var task in essModel.tasks)
                {
                    if (TaskManager.CreateOutstoreTask(task))
                    {
                        result.data.Add(task.taskDescribe.containerCode, "ok");
                    }
                }
            }
            LogUtil.info($"收到任务创建:【{s}】【{JsonHelper.SerializeObject(result)}】");
            return result;
        }

        Result IService.containerArrived(Stream stream)
        {
            var result = new Result();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            var essModel = JsonHelper.DeserializeJsonToObject<EssModel>(s);
            TaskManager.SetContainerArrived(essModel);
            LogUtil.info($"收到料箱到达:【{s}】【{JsonHelper.SerializeObject(result)}】");
            return result;
        }
    }

    public class AGVService
    {
        private WebServiceHost _serviceHost;
        public bool State = false;
        public void Open(string url)
        {
            try
            {
                WebService service = new WebService();
                _serviceHost = new WebServiceHost(service, new Uri(url));//service, new Uri(url)
                _serviceHost.Open();
                State = true;
                LogUtil.info($"Web服务已开启:{url}");
            }
            catch (Exception ex)
            {
                State = false;
                LogUtil.error($"Web服务开启出错:{url}", ex);
            }
        }

        public void Close()
        {
            try
            {
                if (_serviceHost != null)//判断服务是否关闭
                    _serviceHost.Close();//关闭服务
                State = false;
                LogUtil.info("Web服务已关闭");
            }
            catch (Exception ex)
            {
                LogUtil.error("Web服务关闭", ex);
            }

        }

    }

}