private async Task <bool> ProcessAppRequestProtocol(TcpClient client, bool IsReconnect = false) { Server.Logger.Debug("Now processing request protocol...."); NetworkStream nstream = client.GetStream(); int clientIdFromToken = 0; //1.读取配置请求1 //TODO !!!!获取Token,截取clientID,校验 //TODO !!!!这里的校验逻辑和httpserver_api存在太多重复,需要重构 clientIdFromToken = await GetClientIdFromNextTokenBytes(client); //var userClaims = StringUtil.ConvertStringToTokenClaims(clientIdFromToken); if (clientIdFromToken == 0) { //TODO 2 服务端错误,校验失败 await nstream.WriteAsync(new byte[] { (byte)ServerStatus.AuthFailed }); client.Close(); return(false); } else if (clientIdFromToken == -1) { //用户被禁用 await nstream.WriteAsync(new byte[] { (byte)ServerStatus.UserBanned }); client.Close(); return(false); } ServerContext.CloseAllSourceByClient(clientIdFromToken); //1.3 获取客户端请求数 int configRequestLength = 3; byte[] appRequestBytes = new byte[configRequestLength]; int resultByte = await nstream.ReadAsyncEx(appRequestBytes); if (resultByte < 1) { CloseClient(client); return(true); } Server.Logger.Debug("appRequestBytes received."); ServerContext.ClientConnectCount += 1; //2.根据配置请求1获取更多配置信息 int appCount = (int)appRequestBytes[2]; byte[] consumerPortBytes = new byte[appCount * (2 + 1 + 1024 + 96)];//TODO 2 暂时这么写,亟需修改 int resultByte2 = await nstream.ReadAsyncEx(consumerPortBytes); //Server.Logger.Debug("consumerPortBytes received."); if (resultByte2 < 1) { CloseClient(client); return(true); } //NSPClient nspClient; //3.分配配置ID,并且写回给客户端 try { byte[] arrangedIds = ConnectionManager.ArrangeConfigIds(appRequestBytes, consumerPortBytes, clientIdFromToken); Server.Logger.Debug("apprequest arranged"); await nstream.WriteAsync(arrangedIds); } catch (Exception ex) { await nstream.WriteAsync(new byte[] { (byte)ServerStatus.UnknowndFailed }); //TODO 2 服务端错误:未知错误 Logger.Debug(ex.ToString()); } finally { client.Close(); } ////4.给NSPClient关联configclient //nspClient.LastUpdateTime Logger.Debug("arrangedIds written."); return(false); }
private async Task <bool> ProcessAppRequestProtocol(TcpClient client, bool IsReconnect = false) { Server.Logger.Debug("Now processing request protocol...."); NetworkStream nstream = client.GetStream(); int clientIdFromToken = 0; //1.读取配置请求1 //如果是重连请求,则读取接下来5个字符,清 //空服务端所有与该client相关的所有连接配置 //TODO !!!!兼容原有的重连逻辑 //TODO !!!!获取Token,截取clientID,校验 //TODO !!!!这里的校验逻辑和httpserver_api存在太多重复,需要重构 clientIdFromToken = await GetClientIdFromNextTokenBytes(client); //var userClaims = StringUtil.ConvertStringToTokenClaims(clientIdFromToken); if (clientIdFromToken == 0) { client.Close(); return(false); } //if (IsReconnect) 因为加入了始终校验的机制,取消重连规则 //{ ServerContext.CloseAllSourceByClient(clientIdFromToken); // } //1.3 获取客户端请求数 int configRequestLength = 3; byte[] appRequestBytes = new byte[configRequestLength]; int resultByte = await nstream.ReadAsync(appRequestBytes); Server.Logger.Debug("appRequestBytes received."); if (resultByte == 0) { CloseClient(client); return(true); } //2.根据配置请求1获取更多配置信息 int appCount = (int)appRequestBytes[2]; byte[] consumerPortBytes = new byte[appCount * 2]; int resultByte2 = await nstream.ReadAsync(consumerPortBytes); Server.Logger.Debug("consumerPortBytes received."); if (resultByte2 == 0) { CloseClient(client); return(true); } //NSPClient nspClient; //3.分配配置ID,并且写回给客户端 try { byte[] arrangedIds = ConnectionManager.ArrangeConfigIds(appRequestBytes, consumerPortBytes, clientIdFromToken); Server.Logger.Debug("apprequest arranged"); await nstream.WriteAsync(arrangedIds); } catch (Exception ex) { Logger.Debug(ex.ToString()); } finally { client.Close(); } ////4.给NSPClient关联configclient //nspClient.LastUpdateTime Logger.Debug("arrangedIds written."); return(false); }