Service.cs 8.0 KB
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System;
using System.IO;
using System.Runtime.Serialization;
using Common;
using DeviceLibrary.service.model;
using DeviceLibrary.manager;

namespace DeviceLibrary
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    internal class WebService : IService
    {
        static log4net.ILog Log = log4net.LogManager.GetLogger("WebService");
        public Result Create(Stream stream)
        {
            Result result = new Result();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            MissionInfo createMissionInfo = JsonHelper.DeserializeJsonToObject<MissionInfo>(s);
            if (createMissionInfo == null)
            {
                result.code = -1;
                result.msg = $"解析失败:{s}";
                Log.Error(result.msg);
            }
            else
            {
                if (!NodeManager.CheckNode(createMissionInfo.sourcePoint))
                {
                    result.code = -1;
                    result.msg = $"不存在的节点:{createMissionInfo.sourcePoint}";
                    Log.Error(result.msg);
                }
                else if(!NodeManager.CheckNodes(createMissionInfo.destinationPoint,out string nodenames))
                {
                    result.code = -1;
                    result.msg = $"不存在的节点:{nodenames}";
                    Log.Error(result.msg);
                }
                else if (!MissionManager.Contains(createMissionInfo))
                {
                    MissionManager.SetMissionState(createMissionInfo.missionId, MissionState.创建, out string msg);
                    MissionManager.Add(createMissionInfo);
                    Log.Info($"Create mission from API:{s}");
                }

                else
                {
                    result.code = -1;
                    result.msg = $"已存在该任务id:{createMissionInfo.missionId}";
                    Log.Error(result.msg);
                }
            }
            return result;
        }

        public Result Update(Stream stream)
        {
            Result result = new Result();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            UpdateMission updateMission = JsonHelper.DeserializeJsonToObject<UpdateMission>(s);
            if (updateMission == null)
            {
                result.code = -1;
                result.msg = $"解析失败:{s}";
                Log.Error(result.msg);
            }
            else
            {
                result.code = -1;
                result.msg = $"该接口未开放,请联系管理员";
                Log.Error(result.msg);
            }
            return result;
        }
        public Result Delete(Stream stream)
        {
            Result result = new Result();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            DeleteMission deleteMission = JsonHelper.DeserializeJsonToObject<DeleteMission>(s);
            if (deleteMission == null)
            {
                result.code = -1;
                result.msg = $"解析失败:{s}";
                Log.Error(result.msg);
            }
            else
            {
                if(MissionManager.Contains(deleteMission.missionId))
                {
                    MissionInfo missionInfo = MissionManager.GetMission(deleteMission.missionId);
                    if(missionInfo ==null)
                    {
                        result.code = -1;
                        result.msg = $"不存在该任务id:{deleteMission.missionId}";
                        Log.Error(result.msg);
                    }
                    else
                    {
                        if (missionInfo.State.Equals(MissionState.创建))
                        {
                            MissionManager.SetMissionState(missionInfo, MissionState.取消);
                            MissionManager.DeleteById(deleteMission.missionId);
                        }
                        else
                        {
                            AgvInfo  agvInfo=AGVManager.agvInfo.Find(k=>k.JobContext.MissionId == deleteMission.missionId);
                            if(agvInfo == null)
                            {
                                MissionManager.SetMissionState(missionInfo, MissionState.中止);
                                MissionManager.DeleteById(deleteMission.missionId);
                            }
                            else
                            {
                                result.code = -1;
                                result.msg = $"已执行该任务,无法取消:{deleteMission.missionId}";
                                Log.Error(result.msg);
                            }

                        }

                    }

                }
                else
                {
                    result.code = -1;
                    result.msg = $"不存在该任务id:{deleteMission.missionId}";
                    Log.Error(result.msg);
                }
            }
            return result;
        }

        public Result OperationFinish(Stream stream)
        {
            Result result = new Result();
            StreamReader sr = new StreamReader(stream);
            string s = sr.ReadToEnd();
            ConfirmOperation operationFinish = JsonHelper.DeserializeJsonToObject<ConfirmOperation>(s);
            if (operationFinish == null)
            {
                result.code = -1;
                result.msg = $"解析失败:{s}";
                Log.Error(result.msg);
            }
            else
            {
                Node node = NodeManager.GetNode(operationFinish.line);
                if(node==null)
                {
                    result.code = -1;
                    result.msg = $"不存在的线体名:{operationFinish.line}";
                    Log.Error(result.msg);
                }
                else
                {
                    if(node.ExtendEquip.CanConfirm)
                    {
                        node.ExtendEquip.ApiConfirmSig=true;
                        Log.Info($"线体[{operationFinish.line}]被调用确认接口");
                    }
                    else
                    {
                        result.code = -1;
                        result.msg = $"线体[{operationFinish.line}]附近无小车,不允许调用该接口";
                        Log.Warn(result.msg);
                    }
                }
            }
            return result;
        }

        public MissionResult ReadAll()
        {
            MissionResult missionResult = new MissionResult();
            missionResult.data = MissionManager.GetMissions();
            return missionResult;
        }
    }

    public class Service
    {
        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服务已开启");
            }
            catch (Exception ex)
            {
                State = false;
                LogUtil.error("Web服务开启", ex);
            }
        }

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

        }

    }



}