public override async ValueTask ConnectAsync() { _cts = new CancellationTokenSource(); if (_client == null) { Func <TransportContext> getCtx = () => _context; _client = new EasyClient <ReceivedPackage>(ServiceProvider.CreateInstance <ReceivedPackageFilter>(getCtx), new ChannelOptions() { MaxPackageLength = 1024 * 1024 * 1024 }); } _client.Closed += async(o, e) => { await DisconnectAsync(); }; if (await _client.ConnectAsync(new IPEndPoint(IPAddress.Parse(ConnectionAddress.IPAddress), ConnectionAddress.Port))) { IsConnected = true; DoReceive(); } else { await DisconnectAsync(); } }
private async ValueTask SendAllRequestsInQueue(IEasyClient <Response, Request> client, int index) { if (!_uncheckedRequests.TryGetValue((EasyClient <Response>)client, out var uncheckedRequest)) { return; } var success = false; while (!success) { success = await Connect(index); if (!success) { Thread.Sleep(1000); } } while (_running) { if (_uncheckedRequests.Count > MaxSizeOfUncheckedRequestList) { Thread.Sleep(100); continue; } var request = await _toBeSendRequests.Dequeue(); // 若请求已超时,则放弃 if (request.IsTimeout) { continue; } try { await client.SendAsync(request.Request); uncheckedRequest.Add(new Tuple <DateTime, RequestWithTimeout>(DateTime.Now, request)); } catch { if (!_running) { return; } await _toBeSendRequests.Enqueue(request, new RequestPriority(0, request.Request.Id)); success = await Connect(index); if (!success) { Thread.Sleep(200); } } } }
public IEasyClient <TPackageInfo> ConfigureEasyClient <TPackageInfo>(IEasyClient <TPackageInfo> client) where TPackageInfo : class { client.Security = new SecurityOptions { TargetHost = "supersocket", EnabledSslProtocols = GetClientEnabledSslProtocols(), RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true }; return(client); }
public HostedService(ILogger <HostedService> logger, IConfigService configService) { _logger = logger; var pipelineFilter = new CommandLinePipelineFilter { Decoder = new PackageDecoder() }; _client = new EasyClient <PackageInfo>(pipelineFilter).AsClient(); _config = configService.Get(); }
public ClientsController(IConfiguration configuration) { var serverIp = configuration["RemoteServer:Ip"]; _serverPort = int.Parse(configuration["RemoteServer:Port"]); _address = IPAddress.Parse(serverIp); var pipelineFilter = new CommandLinePipelineFilter { Decoder = new PackageDecoder() }; _client = new EasyClient <PackageInfo>(pipelineFilter).AsClient(); }
public override async Task ConnectAsync() { _cancellationTokenSource = new CancellationTokenSource(); if (_client == null) { _client = new EasyClient <ReceivedPackage>(new ReceivedPackageFilter(GetContext)); } var connectSuccess = await _client.ConnectAsync(new IPEndPoint(IPAddress.Parse(ConnectionAddress.IPAddress), ConnectionAddress.Port)); if (connectSuccess) { DoReceive(); } }
public SocketService(IConfiguration configuration, ILogger <SocketService> logger, IHubContext <SocketHub, ISocketClient> socketHub) { _serverIp = configuration["RemoteServer:Ip"]; _serverPort = int.Parse(configuration["RemoteServer:Port"]); _socketHub = socketHub; _logger = logger; var pipelineFilter = new CommandLinePipelineFilter { Decoder = new PackageDecoder() }; _client = new EasyClient <PackageInfo>(pipelineFilter).AsClient(); }
static async Task Main(string[] args) { client = new EasyClient <TextPackageInfo>(new MyPackageFilter()).AsClient(); if (!await client.ConnectAsync(new IPEndPoint(IPAddress.Loopback, 4040))) { Console.WriteLine("Failed to connect the target server."); return; } //client.PackageHandler += async (s, p) => //{ // Console.WriteLine(p.Text); // await Task.CompletedTask; //}; //client.StartReceive(); //var hdn = Task.Run(Receive); //hdn.Start(); await client.SendAsync(Encoding.UTF8.GetBytes("Test" + "\r\n")); //await client.SendAsync(Encoding.UTF8.GetBytes("Test" + "\r\n")); //await Task.Delay(5000); //var p = await client.ReceiveAsync(); //Console.WriteLine(p.Text); await Task.Delay(5000); while (true) { var p = await client.ReceiveAsync(); if (p == null) { break; } Console.WriteLine("接收到的数据:" + p.Text); } //while (true) //{ // var p = await client.ReceiveAsync(); // Console.WriteLine("接收信息:" + p.Text?.ToString()); //} }
/// <summary> /// 连接 /// </summary> /// <returns></returns> public async Task ConnectAsync() { var client = new EasyClient <IJTTPackageInfo>(Filter); client.PackageHandler += PackageHandler; client.Closed += Closed; EasyClient = client.AsClient(); try { var connected = await EasyClient.ConnectAsync( new IPEndPoint( IPAddress.Parse(Config.ServerHost), Config.ServerPort), CancellationToken.None); if (connected) { Logger.Log( NLog.LogLevel.Trace, LogType.系统跟踪, $"已连接服务器, " + $"\r\t\nServer: {Config.ServerHost}:{Config.ServerPort}."); StartReceive(); } else { Logger.Log( NLog.LogLevel.Trace, LogType.系统跟踪, $"连接服务器失败, " + $"\r\t\nServer: {Config.ServerHost}:{Config.ServerPort}."); } } catch (Exception ex) { Logger.Log( NLog.LogLevel.Error, LogType.系统异常, $"连接服务器时发生错误, " + $"\r\t\nServer: {Config.ServerHost}:{Config.ServerPort}.", null, ex); } }
/// <summary>Connect to server /// </summary> public async ValueTask ConnectAsync() { if (_isConnected) { _logger.LogWarning("Socket client is connected , don't connect again !"); return; } try { _easyClient = new EasyClient <Packet>(new PacketFilter(9)); await _easyClient.ConnectAsync(_setting.ServerEndPoint); _isConnected = true; } catch (Exception ex) { _logger.LogError(ex, "Socket client to server '{0}' fail!", _setting.ServerEndPoint.ToStringAddress()); _isConnected = false; } }
private async Task InitTcp() { var options = new ChannelOptions { Logger = NullLogger.Instance, ReadAsDemand = true }; _client = new EasyClient <TextPackageInfo>(new LinePipelineFilter(), options).AsClient(); var connected = await _client.ConnectAsync(new IPEndPoint(IPAddress.Loopback, 8888)); var connectPackage = new MessagePackage <TextMessageModel>() { OpCode = OpCode.Connect, MessageType = MessageType.TextMessage, Message = new TextMessageModel() { LocalName = TbUserName.Text, RemoteName = "Server" } }; await _client.SendAsync( new ReadOnlyMemory <byte>(Encoding.UTF8.GetBytes(connectPackage.ToString()))); while (true) { var receivePackage = JsonConvert.DeserializeObject <MessagePackage <TextMessageModel> >((await _client.ReceiveAsync()).Text); if (receivePackage.Message == null) { continue; } switch (receivePackage.OpCode) { case OpCode.DisConnect: MessageBox.Show(receivePackage.Message.TextMessage, receivePackage.Message.LocalName); TbUserName.IsEnabled = true; break; case OpCode.Connect: LvOnlineList.Children.Clear(); var allItem = new UserItemsControl("All"); allItem.setRoteName = SetRoteName; LvOnlineList.Children.Add(allItem); foreach (var userClient in receivePackage.Clients) { var childItem = new UserItemsControl(userClient.Username); childItem.setRoteName = SetRoteName; LvOnlineList.Children.Add(childItem); } TbUserName.IsEnabled = false; break; case OpCode.All: this.LbCurrentChat.Content = receivePackage.Message.LocalName; WpChatArea.Children.Add(new MessageControl(new TextMessageModel() { LocalName = receivePackage.Message.LocalName, TextMessage = receivePackage.Message.TextMessage })); break; case OpCode.Single: LbCurrentChat.Content = receivePackage.Message.LocalName; WpChatArea.Children.Add(new MessageControl(new TextMessageModel() { LocalName = receivePackage.Message.LocalName, TextMessage = receivePackage.Message.TextMessage })); break; } Scr.ScrollToEnd(); if (connected) { BdConnectState.Background = new SolidColorBrush(Colors.LimeGreen); TbUserName.IsEnabled = false; } else { BdConnectState.Background = new SolidColorBrush(Colors.OrangeRed); TbUserName.IsEnabled = true; break; } await Task.Delay(500); } //while (true) //{ // var package = await _client.ReceiveAsync(); // //if(package != null) SpChatArea.Text += "Receive:" + package.Text + Environment.NewLine; // var data = JsonConvert.DeserializeObject<TextMessageModel>(package.Text); // if (package != null) // { // WpChatArea.Children.Add(new MessageControl(new TextMessageModel() // { // LocalName = data.LocalName, // TextMessage = data.TextMessage // })); // } // await Task.Delay(500); //} }
public IEasyClient <TPackageInfo> ConfigureEasyClient <TPackageInfo>(IEasyClient <TPackageInfo> client) where TPackageInfo : class { return(client); }
public abstract IEasyClient <TPackageInfo> ConfigureEasyClient <TPackageInfo>(IEasyClient <TPackageInfo> client) where TPackageInfo : class;
private async void InitTcpConnectAndReceive() { var options = new ChannelOptions { Logger = NullLogger.Instance, ReadAsDemand = true }; _sendTcpClient = new EasyClient <TextPackageInfo>(new LinePipelineFilter(), options).AsClient(); _connected = await _sendTcpClient.ConnectAsync(new IPEndPoint(IPAddress.Loopback, 8888)); var connectPackage = new TcpPackage() { OpCode = OpCode.Connect, LocalName = TbUserName.Text, RemoteName = "Server", MessageType = MessageType.Text }; await _sendTcpClient.SendAsync( new ReadOnlyMemory <byte>(Encoding.UTF8.GetBytes(connectPackage.ToString()))); while (true) { var receivePackage = TcpPackage.JsonToPackage((await _sendTcpClient.ReceiveAsync()).Text); if (string.IsNullOrEmpty(receivePackage.Message)) { continue; } switch (receivePackage.OpCode) { case OpCode.Connect: SpOnlineList.Children.Clear(); var allItem = new UserItemsControl("All"); allItem.setRoteName = SetRoteName; SpOnlineList.Children.Add(allItem); foreach (var onlineClient in receivePackage.Clients) { var childItem = new UserItemsControl(onlineClient.Username); childItem.setRoteName = SetRoteName; SpOnlineList.Children.Add(childItem); } TbUserName.IsEnabled = false; BtnConnectServer.IsEnabled = false; break; case OpCode.DisConnect: MessageBox.Show(receivePackage.Message, receivePackage.LocalName); TbUserName.IsEnabled = true; break; case OpCode.All: case OpCode.Single: LbChatWith.Content = receivePackage.OpCode == OpCode.All ? receivePackage.RemoteName : receivePackage.LocalName; switch (receivePackage.MessageType) { case MessageType.Text: ChatArea.Children.Add(new ReceiveControl(receivePackage, null)); break; case MessageType.Image: // 建立UDP客户端 直接接收消息 ReceiveImage(receivePackage: receivePackage); break; case MessageType.File: var res = MessageBox.Show("是否接收文件?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information); if (res == MessageBoxResult.Yes) { // 发送TCP确认连接消息 // 创建UDP客户端 } break; } break; case OpCode.Confirm: switch (receivePackage.MessageType) { case MessageType.Image: var fileName = await SendImage(); await Task.Delay(1000); await SendImage(fileName, receivePackage); break; case MessageType.File: break; } break; } Scr.ScrollToEnd(); if (_connected) { BdConnectState.Background = new SolidColorBrush(Colors.LimeGreen); TbUserName.IsEnabled = false; } else { BdConnectState.Background = new SolidColorBrush(Colors.OrangeRed); TbUserName.IsEnabled = true; break; } //await Task.Delay(1000); } }