using iWareOpc.Cache.Entity;
using iWareOpc.Properties;
using iWareOpc.Utils;
using OpcAccess.Access.Entity;
using OpcAccess.Access.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWareOpc.Opc.Service
{
    public class OpcService
    {
        private static object Lock = new object();
        private OpcService() { }
        private static OpcService Instance = null;
        /// 
        /// 获取单例的方法
        /// 
        /// Opc的单例实体
        public static OpcService GetInstance()
        {
            if (Instance == null)
            {
                lock (Lock)
                {
                    if (Instance == null)
                    {
                        Instance = new OpcService();
                    }
                }
            }
            return Instance;
        }
        /// 
        /// 根据ip,群获取opc服务
        /// 
        /// 
        /// 
        /// 
        public OpcAccessService GetOpcAccessService(string ip, List opcGroups)
        {
            var opcAccessService = new OpcAccessService(ip);
            opcAccessService.Init(opcGroups);
            return opcAccessService;
        }
        /// 
        /// 写入OPC值
        /// 
        /// 组名
        /// 项名
        /// 写入值
        /// 是否写入成功
        public bool WriteValue(string groupName, string itemName, object value)
        {
            
            try
            {
                return CacheEntity.OpcAccessService.WriteValuePoint(groupName, itemName, value);
            }
            catch (Exception ex)
            {
                LogTextHelper.WriteLog(Resources.LogDir,this.ToString(),"WriteValue",ex.Message);
                return false;
            }
        }
        /// 
        /// 批量写入OPC值
        /// 
        /// 组名
        /// 项目名列表
        /// 写入值列表
        /// 是否写入成功
        public bool WriteValue(string groupName, List itemNames, List