| | |
| | | { |
| | | public partial class TcpSocketServer |
| | | { |
| | | /// <summary> |
| | | /// 弿¥å¯å¨TCPæå¡å¨ï¼ä½¿å
¶å¼å§æ¥åä¼ å
¥ç客æ·ç«¯è¿æ¥ã |
| | | /// </summary> |
| | | /// <remarks>妿æå¡å¨å·²å¨è¿è¡æéè¿é
ç½®ç¦ç¨ï¼æ¤æ¹æ³å°ç«å³è¿åèä¸å¯å¨æå¡å¨ã |
| | | /// åç»ç客æ·ç«¯çæ§åæ¥åæä½å¨åå°ä»»å¡ä¸è¿è¡ãæ¤æ¹æ³ä¸ä¼é»å¡è°ç¨çº¿ç¨ã</remarks> |
| | | /// <param name="cancellationToken">å¯ç¨äºè¯·æ±åæ¶æå¡å¨å¯å¨ååç»åå°æä½ç忶令çã</param> |
| | | /// <returns>è¡¨ç¤ºå¼æ¥å¯å¨æä½çä»»å¡ã彿å¡å¨å¼å§çå¬è¿æ¥æ¶ä»»å¡å®æã</returns> |
| | | public Task StartAsync(CancellationToken cancellationToken) |
| | | { |
| | | if (IsRunning || !_options.Enabled) |
| | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | //// <summary> |
| | | /// 弿¥åæ¢æå¡å¨å¹¶çå¾
æææ´»å¨å®¢æ·ç«¯è¿æ¥å®æã |
| | | /// </summary> |
| | | /// <remarks>妿æå¡å¨æªè¿è¡ï¼æ¤æ¹æ³å°ç«å³è¿åè䏿§è¡ä»»ä½æä½ã |
| | | /// æ¤æ¹æ³ç¡®ä¿ææå®¢æ·ç«¯ä»»å¡å®æåæå°æå¡å¨æ è®°ä¸ºå·²åæ¢ã</remarks> |
| | | /// <param name="cancellationToken">å¯ç¨äºå¨å®æå忶忢æä½ç忶令çã</param> |
| | | /// <returns>è¡¨ç¤ºå¼æ¥åæ¢æä½çä»»å¡ã</returns> |
| | | public async Task StopAsync(CancellationToken cancellationToken) |
| | | { |
| | | if (!IsRunning) |
| | |
| | | IsRunning = false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æç»æ¥åä¼ å
¥çTCP客æ·ç«¯è¿æ¥ï¼ç´å°è¯·æ±åæ¶ã |
| | | /// </summary> |
| | | /// <remarks>æ¤æ¹æ³æ¨å¨åå°è¿è¡ä»¥å¤çæ°ç客æ·ç«¯è¿æ¥ã |
| | | /// 妿çå¬å¨è¢«éæ¾æéè¿æä¾ç令ç请æ±åæ¶ï¼å¾ªç¯å°éåºã</remarks> |
| | | /// <param name="cancellationToken">å¯ç¨äºè¯·æ±åæ¶æ¥å循ç¯ç令çãå½è¯·æ±åæ¶æ¶ï¼å¾ªç¯å°ç«å³ç»æ¢ã</param> |
| | | /// <returns>è¡¨ç¤ºå¼æ¥æ¥åå¾ªç¯æä½çä»»å¡ã</returns> |
| | | private async Task AcceptLoopAsync(CancellationToken cancellationToken) |
| | | { |
| | | while (!cancellationToken.IsCancellationRequested) |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä»å
é¨éåä¸ç§»é¤æå®æ è¯ç¬¦ç客æ·ç«¯ï¼å¹¶éæ¾ç¸å
³èµæºã |
| | | /// </summary> |
| | | /// <remarks>æ¤æ¹æ³å
³é客æ·ç«¯è¿æ¥ï¼éæ¾ä»»ä½å
³èçéï¼å¹¶ç§»é¤å¯¹å®¢æ·ç«¯çææå¼ç¨ï¼ |
| | | /// å
æ¬è®¾å¤ç»å®åç¼ç ä¿¡æ¯ãéè¿å¯¹å
é¨åæ¥å¯¹è±¡å éç¡®ä¿çº¿ç¨å®å
¨ã</remarks> |
| | | /// <param name="clientId">è¦ç§»é¤ç客æ·ç«¯çå¯ä¸æ è¯ç¬¦ãä¸è½ä¸ºnullæç©ºã</param> |
| | | private void RemoveClient(string clientId) |
| | | { |
| | | lock (_syncRoot) |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 弿¥çæ§å·²è¿æ¥ç客æ·ç«¯ï¼å¹¶æå¼è¶
è¿é
ç½®è¶
æ¶æ¶é´é²ç½®ç客æ·ç«¯è¿æ¥ã |
| | | /// </summary> |
| | | /// <remarks>æ¤æ¹æ³æç»æ£æ¥é²ç½®å®¢æ·ç«¯ï¼å¦æå
¶ä¸æ´»å¨æ¶é´è¶
è¿æå®ç空é²è¶
æ¶ï¼åæå¼è¿æ¥ã |
| | | /// çæ§å¾ªç¯å°æç»è¿è¡ï¼ç´å°éè¿æä¾ç令ç请æ±åæ¶ã</remarks> |
| | | /// <param name="cancellationToken">å¯ç¨äºè¯·æ±ç»æ¢çæ§å¾ªç¯ç忶令çã</param> |
| | | /// <returns>è¡¨ç¤ºå¼æ¥çæ§æä½çä»»å¡ã</returns> |
| | | private async Task MonitorClientsAsync(CancellationToken cancellationToken) |
| | | { |
| | | while (!cancellationToken.IsCancellationRequested) |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åºäºè¿ç¨ç»ç«¯ç¹è·åæå®TCP客æ·ç«¯çå¯ä¸æ è¯ç¬¦å符串ã |
| | | /// </summary> |
| | | /// <remarks>è¿åçæ è¯ç¬¦éç¨äºå¨æ¥å¿è®°å½æè·è¸ªåºæ¯ä¸åºå客æ·ç«¯ã |
| | | /// 妿客æ·ç«¯çè¿ç¨ç»ç«¯ç¹ä¸å¯ç¨ï¼å°çæGUID以确ä¿å¯ä¸æ§ã</remarks> |
| | | /// <param name="client">è¦è·åæ è¯ç¬¦çTCP客æ·ç«¯ãä¸è½ä¸ºnullã</param> |
| | | /// <returns>表示客æ·ç«¯è¿ç¨ç»ç«¯ç¹çå符串ï¼å¦æå¯ç¨ï¼ï¼å¦å为çæçæ°GUIDå符串ã</returns> |
| | | public static string GetClientId(TcpClient client) |
| | | { |
| | | return client.Client.RemoteEndPoint?.ToString() ?? Guid.NewGuid().ToString(); |