⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worker.cs

📁 是一个简易的聊天系统
💻 CS
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Xml;
using System.Diagnostics;
using WebHelper.Model;
using System.Text;
/// <summary>
/// Worker 的摘要说明
/// </summary>
public class Worker
{
    /// <summary>
    /// 所有的客服
    /// </summary>
    private Dictionary<string, CustomService> _all;


    /// <summary>
    /// 按分类、在线
    /// </summary>
    private Dictionary<int, List<string>> _online;
    /// <summary>
    /// 客服分组
    /// </summary>
    private List<int> _types;
    /// <summary>
    /// 记入系统日志
    /// </summary>
    public Dictionary<string, CustomService> All
    {
        get { return _all; }
    }

    private string _fatType;
    public string FatType
    {
        get { return _fatType; }
    }
    private string _typePath;
	public Worker(string path)
	{
        _typePath = path;
        this.loadOnline();
        this.loadService();
	}


    #region 私有
    /// <summary>
    /// 初始化在线列表
    /// </summary>
    /// <returns></returns>
    public void loadOnline()
    {
        _online = new Dictionary<int, List<string>>();
        _types = new List<int>();
        XmlDocument doc = new XmlDocument();
        doc.Load(_typePath);
        XmlNodeList nl = doc.GetElementsByTagName("Item");

        for (int i = 0; i < nl.Count; i++)
        {
            _online.Add(int.Parse(nl[i].Attributes["Value"].InnerText), new List<string>());
            _types.Add(int.Parse(nl[i].Attributes["Value"].InnerText));
        }
        _fatType = doc.LastChild.InnerXml;
        doc = null;
    }

    /// <summary>
    /// 加载所有客服
    /// </summary>
    public void loadService()
    {
        _all = new Dictionary<string, CustomService>();
        WebHelper.DAL.CustomService dal = new WebHelper.DAL.CustomService();
        SqlDataReader dr = dal.GetList();

        while (dr.Read())
        {
            CustomService model = new CustomService();
            model.ClassID = (int)dr["ClassID"];
            model.CustomServiceID = (int)dr["CustomServiceID"];
            model.Name = dr["Name"].ToString();
            model.Password = dr["Password"].ToString();
            model.Status = 0;
            model.Title = dr["Title"].ToString();
            model.TrueName = dr["TrueName"].ToString();
            model.LastActiveTime = (DateTime)dr["LastActiveTime"];
            _all.Add(model.Name, model);


        }
        dr.Close();
        dr.Dispose();
        dal = null;
    }

    #endregion

    /// <summary>
    /// 访问者登录进来分配客服
    /// </summary>
    /// <param name="type"></param>
    /// <param name="guestID"></param>
    /// <returns></returns>
    public bool Allot(Guest guest)
    {
        if (!_online.ContainsKey(guest.AskType))
            return false;




        int size = 1000000;
        CustomService selected=null;

        if (_online[guest.AskType].Count > 0)
        {
            List<string> allOn = _online[guest.AskType];
            for (int i = 0; i < allOn.Count; i++)
            {
                if (_all[allOn[i]].Status < 1) continue;
                if (_all[allOn[i]].Guest.Count < size)
                {
                    size = _all[allOn[i]].Guest.Count;
                    selected = _all[allOn[i]];
                }
            }
        }
        else
        {
            foreach(string k in _all.Keys)
            {
                if (_all[k].Status < 1) continue;
                if (_all[k].Guest.Count < size)
                {
                    size = _all[k].Guest.Count;
                    selected = _all[k];
                }
            }
        }

        if (selected == null) return false;
        if(selected.Guest.ContainsKey(guest.GuestID))return true;
        selected.Guest.Add(guest.GuestID,guest);
        guest.Worker = selected.Name;
        return true;

    }


    /// <summary>
    /// 客服登录,1是否成功,2原因
    /// </summary>
    /// <param name="tcp"></param>
    /// <param name="data"></param>
    public bool Login(string name, string passWD,out int errorCode)
    {


        if (!_all.ContainsKey(name))
        {
            errorCode = 1;
            return false;
        }

        CustomService model = _all[name];
        if (model.Password.Trim() != passWD.Trim())
        {
            errorCode = 2;
            return false;
        }

        ////一个客服帐户只能一个地方使用,所以,新的不能登录
        //if (model.Status > 0)
        //{
        //    errorCode = 3;
        //    return false;
        //}
        
        model.Status = 1;
        _online[model.ClassID].Add(name);
        errorCode = 0;
        return true;
        // model.Log = new Logs.Log(model);//添加日志



    }



    /// <summary>
    /// 退出后,处理他服务的对象
    /// </summary>
    /// <param name="name"></param>
    public void LoginOut(string name)
    {
        CustomService model = _all[name];
        _online[model.ClassID].Remove(name);
        _all[name].Status = 0;
        foreach (string g in _all[name].Guest.Keys )
        {
            this.Allot(_all[name].Guest[g]);
        }
        _all[name].Guest.Clear();

        //model.Status = 0;

        
    }

    public void ClearGuest(CustomService model) 
    {
       foreach(string k in model.Guest.Keys)
       {
           model.Guest[k].Worker = null;
       }
       model.Guest.Clear();
    }

    /// <summary>
    /// 字符串类型的所有客服
    /// </summary>
    public string AllString()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("[");
        foreach (CustomService v in _all.Values)
        {
            sb.Append("{");
            sb.Append("'TrueName':'"+v.TrueName+"',");
            sb.Append("'Name':'" + v.Name + "',");
            sb.Append("'Status':'" + v.Status.ToString() + "',");
            sb.Append("'ClassID':'" + v.ClassID.ToString() + "'");
            sb.Append("},");
        }
        if(sb.Length>1)
        sb.Remove(sb.Length - 1, 1);
        sb.Append("]");
        return sb.ToString();

    }

    public string GetAllOnline()
    {

        StringBuilder sb = new StringBuilder();
        sb.Append("{");
        foreach (CustomService v in _all.Values)
        {
            if (v.Status < 1) continue;
            sb.Append("'" + v.Name + "':'" + v.Guest.Count.ToString() + "',");
        }
        if(sb.Length>1)
        sb.Remove(sb.Length - 1, 1);
        sb.Append("}");
        return sb.ToString();
    }


    public bool ReLine(string send, string to, string guest)
    {
        CustomService model = _all[to];
        if (model.Status < 1)
            return false;



        model.Guest.Add(guest, _all[send].Guest[guest]);
        _all[send].Guest.Remove(guest);
        model.Guest[guest].CreateLog();
        model.Guest[guest].Worker = model.Name;
        return true;
    }



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -