schangxiang@126.com
2025-09-17 c9c91ad3e3ac218d81c86809c93a35622b51a686
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using HPSocketCS;
using iWareCc.Conveyor.Entity;
using iWareCc.Conveyor.Service;
using iWareCcTest.Properties;
using iWareCommon.Utils;
using System;
using iWareCc.Util;
using System.Text;
using System.Runtime.InteropServices;
 
namespace iWareCc.Conveyor.Socket
{
     /// <summary>
    /// 接收端Socket的实现类
    /// </summary>
    public class GateSocketServer:SocketServer
    {
          /// <summary>
        /// 端口对象
        /// </summary>
        private GateEntity Gate;
 
        public GateSocketServer(TcpServer server, string ip, string port)
            : base(server, ip, port) 
        { 
        }
 
        public GateSocketServer(GateEntity gate, TcpServer server, string ip, string port)
            : base(server, ip, port)
        {
            this.Gate = gate;
        }
 
 
        /// <summary>
        /// 有客户端连入到
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="pClient"></param>
        /// <returns></returns>
        protected override HandleResult OnAccept(IntPtr connId, IntPtr pClient)
        {
            LogTextHelper.WriteLine(Resources.LogDir, "端口{0}服务已连接,连接ID:{1}",Gate.Place.PlaceTypeName,connId);
            string ip = string.Empty;
            ushort port = 0;
            if (base.Server.GetRemoteAddress(connId, ref ip, ref port))
            {
                IsClientOn = true;//将客户端连接设为连接
 
            }
            return HandleResult.Ok;
        }
 
        /// <summary>
        /// 客户端断开时执行的代码
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="enOperation"></param>
        /// <param name="errorCode"></param>
        /// <returns></returns>
        protected override HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
        {
 
            string ip = string.Empty;
            ushort port = 0;
            
            if (base.Server.GetRemoteAddress(connId, ref ip, ref port))
            {
                IsClientOn = false;//将客户端连接设为断开
            }
            LogTextHelper.WriteLine(Resources.LogDir, "端口{0}服务已断开", Gate.Place.PlaceTypeName);
            return HandleResult.Ok;
        }
 
        /// <summary>
        /// 接收到字符串后的操作
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        protected override HandleResult OnReceive(IntPtr connId, byte[] bytes)
        {
            new GateService(Gate).AddToDatagramPoolReceive(ASCIIEncoding.ASCII.GetString(bytes));
            LogTextHelper.WriteLine(Resources.LogDir+@"/端口接收的套接字信息/" + Gate.Place.PlaceTypeName, ASCIIEncoding.ASCII.GetString(bytes));
            if (Gate.ServerReceiveLogger.Count >= 20)
            {
                Gate.ServerReceiveLogger.RemoveAt(0);
            }
 
            Gate.ServerReceiveLogger.Add(ASCIIEncoding.ASCII.GetString(bytes));
            return HandleResult.Ok;
        }
 
        /// <summary>
        /// 发送字节码数值后的操作
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        protected override HandleResult OnSend(IntPtr connId, byte[] bytes)
        {
            LogTextHelper.WriteLine(Resources.LogDir + @"/端口发送的套接字信息/" + Gate.Place.PlaceTypeName, ASCIIEncoding.ASCII.GetString(bytes));
 
            if (Gate.ServerSendLogger.Count >= 20)
            {
                Gate.ServerSendLogger.RemoveAt(0);
            }
 
            Gate.ServerSendLogger.Add(ASCIIEncoding.ASCII.GetString(bytes));
            
            return HandleResult.Ok;
        }
 
        /// <summary>
        /// 断开socket服务成功后执行的方法
        /// </summary>
        /// <returns></returns>
        protected override HandleResult OnShutdown()
        {
            //服务开启状态设为断开
            IsServerStarted = false;
            return HandleResult.Ok;
        }
 
        /// <summary>
        /// 连接成功后的操作
        /// </summary>
        /// <param name="soListen"></param>
        /// <returns></returns>
        protected override HandleResult OnPrepareListen(IntPtr soListen)
        {
            //服务开启状态设为开启
            IsServerStarted = true;
 
            return HandleResult.Ok;
        }
    }
}