/// <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); }
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); }
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); }