用新的序列化架构改造DNS,测试失败,下午抓包对比分析
nnhy authored at 2016-02-13 12:30:47
1.81 KiB
X
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NewLife.Net.Sockets;

namespace NewLife.Net.Dhcp
{
    /// <summary>DHCP会话</summary>
    public class DhcpSession : NetSession
    {
        /// <summary>收到数据时触发</summary>
        /// <param name="e"></param>
        protected override void OnReceive(ReceivedEventArgs e)
        {
            var dhcp = new DhcpEntity();
            dhcp.Read(e.Stream, null);

            var kind = dhcp.Kind;
            WriteLog("收到:{0} {1}", kind, e.UserState);
            var ds = (this as INetSession).Host as DhcpServer;

            var dme = new DhcpMessageEventArgs();
            dme.Request = dhcp;
            dme.UserState = e.UserState;

            if (OnMessage != null) OnMessage(this, dme);

            ds.RaiseMessage(this, dme);

            if (dme.Response != null)
            {
                var buf = dme.Response.ToArray();
                Send(buf);
            }

            base.OnReceive(e);
        }

        /// <summary>收到消息时触发</summary>
        public event EventHandler<DhcpMessageEventArgs> OnMessage;
    }

    /// <summary>消息事件参数</summary>
    public class DhcpMessageEventArgs : EventArgs
    {
        private DhcpEntity _Request;
        /// <summary>收到的消息</summary>
        public DhcpEntity Request { get { return _Request; } set { _Request = value; } }

        private DhcpEntity _Response;
        /// <summary>响应消息</summary>
        public DhcpEntity Response { get { return _Response; } set { _Response = value; } }

        private Object _UserState;
        /// <summary>用户对象</summary>
        public Object UserState { get { return _UserState; } set { _UserState = value; } }
    }
}