Exemple #1
0
        /// <summary>
        /// 客户进入
        /// </summary>
        /// <param name="dwConnId"></param>
        /// <param name="pClient"></param>
        /// <returns></returns>
        protected virtual HandleResult OnServerAccept(IntPtr dwConnId, IntPtr pClient)
        {
            // 获取客户端ip和端口
            string ip   = string.Empty;
            ushort port = 0;

            if (server.GetRemoteAddress(dwConnId, ref ip, ref port))
            {
                AddMsg(string.Format(" > [{0},OnServerAccept] -> PASS({1}:{2})", dwConnId, ip.ToString(), port));
            }
            else
            {
                AddMsg(string.Format(" > [{0},OnServerAccept] -> Server_GetClientAddress() Error", dwConnId));
                return(HandleResult.Error);
            }

            IntPtr clientConnId = IntPtr.Zero;

            // 一次不成功的事偶尔可能发生,三次连接都不成功,那就真连不上了
            // 当server有连接进入,使用agent连接到目标服务器
            if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
            {
                if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
                {
                    if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
                    {
                        AddMsg(string.Format(" > [Client->Connect] fail -> ID:{0}", clientConnId));
                        return(HandleResult.Error);
                    }
                }
            }


            // 设置附加数据
            ConnExtraData extra = new ConnExtraData();

            extra.ConnIdForServer = dwConnId;
            extra.ConnIdForClient = clientConnId;
            extra.Server          = server;
            extra.FreeType        = 0;
            if (server.SetConnectionExtra(dwConnId, extra) == false)
            {
                AddMsg(string.Format(" > [{0},OnServerAccept] -> server.SetConnectionExtra fail", dwConnId));
                return(HandleResult.Error);
            }

            if (agent.SetConnectionExtra(clientConnId, extra) == false)
            {
                server.SetConnectionExtra(dwConnId, null);
                AddMsg(string.Format(" > [{0}-{1},OnServerAccept] -> agent.SetConnectionExtra fail", dwConnId, clientConnId));
                return(HandleResult.Error);
            }

            return(HandleResult.Ok);
        }
Exemple #2
0
        HandleResult Service_OnAccept(TcpServer sender, IntPtr connId, IntPtr pClient)
        {
            var aId = IntPtr.Zero;

            if (agent.Connect(forwardIp, forwardPort, ref aId))
            {
                this.SetExtra(connId, aId);
                agent.SetExtra(aId, connId);
            }
            else
            {
                this.Disconnect(connId);
            }
            return(HandleResult.Ignore);
        }
Exemple #3
0
        HandleResult Service_OnAccept(TcpServer sender, System.IntPtr connId, System.IntPtr pClient)
        {
            var aId = IntPtr.Zero;

            if (agent.Connect(remoteIp, remotePort, ref aId))
            {
                this.SetExtra(connId, aId);
                agent.SetExtra(aId, connId);
            }
            else
            {
                this.Disconnect(connId);
            }
            return(HandleResult.Ok);
        }