public ValueTask <Stream> GetClientStream(Socket socket) { var channel = new UdpPipeChannel <TextPackageInfo>(socket, new TerminatorPipelineFilter <TextPackageInfo>(new[] { (byte)'\r', (byte)'\n' }), new ChannelOptions(), Listener.GetListenEndPoint()); UdpReceive(socket, channel).DoNotAwait(); return(new ValueTask <Stream>(new UdpChannelStream(channel))); }
public ValueTask <Stream> GetClientStream(Socket socket) { var channel = new UdpPipeChannel <TextPackageInfo>(socket, new TerminatorPipelineFilter <TextPackageInfo>(new[] { (byte)'\r', (byte)'\n' }) { Decoder = new UdpPackageDecoder() }, new ChannelOptions(), new IPEndPoint(IPAddress.Loopback, Listener.GetListenEndPoint().Port)); channel.Start(); UdpReceive(socket, channel).DoNotAwait(); return(new ValueTask <Stream>(new UdpChannelStream(channel, socket))); }
/// <summary> /// 连接远程地址 /// </summary> /// <param name="ip">远程IP地址</param> /// <param name="port">端口号</param> /// <param name="protocolType">协议类型</param> /// <returns>连接成功返回会话,失败返回空</returns> public async ValueTask <BaizeSession> CreateClientAsync(string ip, int port, Baize.IPlugin.SuperSocket.ProtocolType protocolType) { BaizeSession rtn = null; try { IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); if (protocolType == Baize.IPlugin.SuperSocket.ProtocolType.TCP) { var socket = new Socket(iPEndPoint.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); await socket.ConnectAsync(iPEndPoint); TcpPipeChannel channel = new TcpPipeChannel(socket, _serverOptions.Value.FilterDataOptions, _logger); var appSession = new AppSession(channel); rtn = appSession.Session; HandleSession(appSession).DoNotAwait(); } else { var listener = _listeners.Where(i => i.Socket.ProtocolType == System.Net.Sockets.ProtocolType.Udp).FirstOrDefault(); if (listener != null) { UdpPipeChannel channel = new UdpPipeChannel(listener.Socket, iPEndPoint, _serverOptions.Value.FilterDataOptions, _logger); var appSession = new AppSession(channel); rtn = appSession.Session; HandleSession(appSession).DoNotAwait(); } } return(rtn); } catch (Exception e) { _logger.LogError($"Failed to connect to {ip}:{port}", e); return(null); } }
public UdpTextReader(UdpPipeChannel <TextPackageInfo> channel) { Channel = channel; _packageEnumerator = channel.RunAsync().GetAsyncEnumerator(); }