/// <summary> /// 出错了 /// </summary> /// <param name="connId"></param> /// <param name="enOperation"></param> /// <param name="errorCode"></param> /// <returns></returns> protected virtual HandleResult OnServerClose(IServer sender, IntPtr connId, SocketOperation enOperation, int errorCode) { if (errorCode == 0) { AddMsg(string.Format(" > [{0},OnServerClose]", connId)); } else { AddMsg(string.Format(" > [{0},OnServerError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode)); } // return HPSocketSdk.HandleResult.Ok; // 获取附加数据 // extra 就是accept里传入的附加数据了 ConnExtraData extra = serverExtra.Get(connId); if (extra == null) { return(HandleResult.Error); } if (extra.FreeType == 0) { // 由client(N)断开连接,释放agent数据 agent.Disconnect(extra.ConnIdForClient); agentExtra.Remove(extra.ConnIdForClient); } serverExtra.Remove(connId); return(HandleResult.Ok); }
/// <summary> /// 出错了 /// </summary> /// <param name="connId"></param> /// <param name="enOperation"></param> /// <param name="errorCode"></param> /// <returns></returns> protected virtual HandleResult OnServerClose(IntPtr connId, SocketOperation enOperation, int errorCode) { if (errorCode == 0) { AddMsg(string.Format(" > [{0},OnServerClose]", connId)); } else { AddMsg(string.Format(" > [{0},OnServerError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode)); } // return HPSocketSdk.HandleResult.Ok; // 获取附加数据 IntPtr extraPtr = IntPtr.Zero; if (server.GetConnectionExtra(connId, ref extraPtr) == false) { return(HandleResult.Error); } // extra 就是accept里传入的附加数据了 ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData)); if (extra.FreeType == 0) { // 由client(N)断开连接,释放agent数据 agent.Disconnect(extra.ConnIdForClient); agent.SetConnectionExtra(extra.ConnIdForClient, null); } server.SetConnectionExtra(connId, null); return(HandleResult.Ok); }
/// <summary> /// 数据到达了 /// </summary> /// <param name="connId"></param> /// <param name="pData"></param> /// <param name="length"></param> /// <returns></returns> protected virtual HandleResult OnServerReceive(IServer sender, IntPtr connId, byte[] bytes) { try { // 获取附加数据 // extra 就是accept里传入的附加数据了 ConnExtraData extra = serverExtra.Get(connId); if (extra == null) { return(HandleResult.Error); } AddMsg(string.Format(" > [Server->OnServerReceive] -> ({0} bytes)", bytes.Length)); // 服务端收到数据了,应该调用agent发送到顶层服务器,实现 client(N)->server->targetServer 的中转 if (agent.Send(extra.ConnIdForClient, bytes, bytes.Length) == false) { return(HandleResult.Error); } return(HandleResult.Ok); } catch (Exception) { return(HandleResult.Error); } }
/// <summary> /// 出错了 /// </summary> /// <param name="connId"></param> /// <param name="enOperation"></param> /// <param name="errorCode"></param> /// <returns></returns> protected virtual HandleResult OnAgentClose(IntPtr connId, SocketOperation enOperation, int errorCode) { if (errorCode == 0) { AddMsg(string.Format(" > [{0},OnAgentClose]", connId)); } else { AddMsg(string.Format(" > [{0},OnAgentError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode)); } // return HPSocketSdk.HandleResult.Ok; // 获取附加数据 ConnExtraData extra = agentExtra.Get(connId); if (extra == null) { return(HandleResult.Error); } agentExtra.Remove(connId); if (extra.FreeType == 0) { // 由Target断开连接,释放server连接 extra.FreeType = 1; serverExtra.Set(extra.ConnIdForServer, extra); extra.Server.Disconnect(extra.ConnIdForServer); } return(HandleResult.Ok); }
/// <summary> /// 数据到达了 /// </summary> /// <param name="connId"></param> /// <param name="pData"></param> /// <param name="length"></param> /// <returns></returns> protected virtual HandleResult OnServerReceive(IntPtr connId, byte[] bytes) { try { // 获取附加数据 IntPtr extraPtr = IntPtr.Zero; if (server.GetConnectionExtra(connId, ref extraPtr) == false) { return(HandleResult.Error); } // extra 就是accept里传入的附加数据了 ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData)); AddMsg(string.Format(" > [Server->OnServerReceive] -> ({0} bytes)", bytes.Length)); // 服务端收到数据了,应该调用agent发送到顶层服务器,实现 client(N)->server->targetServer 的中转 if (agent.Send(extra.ConnIdForClient, bytes, bytes.Length) == false) { return(HandleResult.Error); } return(HandleResult.Ok); } catch (Exception) { return(HandleResult.Error); } }
/// <summary> /// 出错了 /// </summary> /// <param name="connId"></param> /// <param name="enOperation"></param> /// <param name="errorCode"></param> /// <returns></returns> protected virtual HandleResult OnAgentClose(IntPtr connId, SocketOperation enOperation, int errorCode) { if (errorCode == 0) { AddMsg(string.Format(" > [{0},OnAgentClose]", connId)); } else { AddMsg(string.Format(" > [{0},OnAgentError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode)); } // return HPSocketSdk.HandleResult.Ok; // 获取附加数据 IntPtr extraPtr = IntPtr.Zero; if (agent.GetConnectionExtra(connId, ref extraPtr) == false) { return(HandleResult.Error); } ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData)); agent.SetConnectionExtra(connId, null); if (extra.FreeType == 0) { // 由Target断开连接,释放server连接 extra.FreeType = 1; server.SetConnectionExtra(extra.ConnIdForServer, extra); extra.Server.Disconnect(extra.ConnIdForServer); } return(HandleResult.Ok); }
/// <summary> /// 客户进入 /// </summary> /// <param name="connId"></param> /// <param name="pClient"></param> /// <returns></returns> protected virtual HandleResult OnServerAccept(IServer sender, IntPtr connId, IntPtr pClient) { // 获取客户端ip和端口 string ip = string.Empty; ushort port = 0; if (server.GetRemoteAddress(connId, ref ip, ref port)) { AddMsg(string.Format(" > [{0},OnServerAccept] -> PASS({1}:{2})", connId, ip.ToString(), port)); } else { AddMsg(string.Format(" > [{0},OnServerAccept] -> Server_GetClientAddress() Error", connId)); 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 = connId; extra.ConnIdForClient = clientConnId; extra.Server = server; extra.FreeType = 0; if (serverExtra.Set(connId, extra) == false) { AddMsg(string.Format(" > [{0},OnServerAccept] -> server.SetConnectionExtra fail", connId)); return(HandleResult.Error); } if (agentExtra.Set(clientConnId, extra) == false) { serverExtra.Remove(connId); AddMsg(string.Format(" > [{0}-{1},OnServerAccept] -> agent.SetConnectionExtra fail", connId, clientConnId)); return(HandleResult.Error); } return(HandleResult.Ok); }
/// <summary> /// 数据到达了 /// </summary> /// <param name="connId"></param> /// <param name="pData"></param> /// <param name="length"></param> /// <returns></returns> protected virtual HandleResult OnAgentReceive(IntPtr connId, byte[] bytes) { // 获取附加数据 ConnExtraData extra = agentExtra.Get(connId); if (extra == null) { return(HandleResult.Error); } AddMsg(string.Format(" > [{0},OnAgentReceive] -> ({1} bytes)", connId, bytes.Length)); if (extra.Server.Send(extra.ConnIdForServer, bytes, bytes.Length) == false) { return(HandleResult.Error); } return(HandleResult.Ok); }
/// <summary> /// 数据到达了 /// </summary> /// <param name="connId"></param> /// <param name="pData"></param> /// <param name="length"></param> /// <returns></returns> protected virtual HandleResult OnAgentReceive(IntPtr connId, byte[] bytes) { // 获取附加数据 IntPtr extraPtr = IntPtr.Zero; if (agent.GetConnectionExtra(connId, ref extraPtr) == false) { return(HandleResult.Error); } ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData)); AddMsg(string.Format(" > [{0},OnAgentReceive] -> ({1} bytes)", connId, bytes.Length)); if (extra.Server.Send(extra.ConnIdForServer, bytes, bytes.Length) == false) { return(HandleResult.Error); } return(HandleResult.Ok); }
/// <summary> /// 客户进入 /// </summary> /// <param name="connId"></param> /// <param name="pClient"></param> /// <returns></returns> protected virtual HandleResult OnServerAccept(IntPtr connId, IntPtr pClient) { // 获取客户端ip和端口 string ip = string.Empty; ushort port = 0; if (server.GetRemoteAddress(connId, ref ip, ref port)) { AddMsg(string.Format(" > [{0},OnServerAccept] -> PASS({1}:{2})", connId, ip.ToString(), port)); } else { AddMsg(string.Format(" > [{0},OnServerAccept] -> Server_GetClientAddress() Error", connId)); 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 = connId; extra.ConnIdForClient = clientConnId; extra.Server = server; extra.FreeType = 0; if (server.SetConnectionExtra(connId, extra) == false) { AddMsg(string.Format(" > [{0},OnServerAccept] -> server.SetConnectionExtra fail", connId)); return HandleResult.Error; } if (agent.SetConnectionExtra(clientConnId, extra) == false) { server.SetConnectionExtra(connId, null); AddMsg(string.Format(" > [{0}-{1},OnServerAccept] -> agent.SetConnectionExtra fail", connId, clientConnId)); return HandleResult.Error; } return HandleResult.Ok; }