Beispiel #1
0
        private async Task ProcessConfigRequestAsync(TcpClient client)
        {
            try
            {
                byte[] appRequestBytes = new byte[4];
                Server.Logger.Debug("config request received.");
                var nstream    = client.GetStream();
                int resultByte = await nstream.ReadAsync(appRequestBytes);

                Server.Logger.Debug("appRequestBytes received.");
                if (resultByte == 0)
                {
                    Console.WriteLine("invalid request");
                }

                try
                {
                    byte[] arrangedIds = ConnectionManager.ArrageConfigIds(appRequestBytes);
                    Server.Logger.Debug("apprequest arranged");
                    await nstream.WriteAsync(arrangedIds);
                }
                catch (Exception ex)
                { Console.WriteLine(ex.ToString()); }


                Console.WriteLine("arrangedIds written.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Beispiel #2
0
        private async Task ProcessConfigRequestAsync(TcpClient client)
        {
            try
            {
                //长度固定4个字节
                int    configRequestLength = 3;
                byte[] appRequestBytes     = new byte[configRequestLength];
                Server.Logger.Debug("config request received.");
                var nstream = client.GetStream();

                //1.读取配置请求1
                int resultByte = await nstream.ReadAsync(appRequestBytes);

                Server.Logger.Debug("appRequestBytes received.");
                if (resultByte == 0)
                {
                    CloseClient(client);
                    return;
                }
                //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;
                }

                //3.分配配置ID,并且写回给客户端
                try
                {
                    byte[] arrangedIds = ConnectionManager.ArrageConfigIds(appRequestBytes, consumerPortBytes);
                    Server.Logger.Debug("apprequest arranged");
                    await nstream.WriteAsync(arrangedIds);
                }
                catch (Exception ex)
                { Logger.Debug(ex.ToString()); }


                Logger.Debug("arrangedIds written.");
            }
            catch (Exception e)
            {
                Logger.Debug(e);
                throw;
            }
        }
Beispiel #3
0
        private async Task <bool> ProcessAppRequestProtocol(TcpClient client, bool IsReconnect = false)
        {
            Server.Logger.Debug("Now processing request protocol....");
            NetworkStream nstream = client.GetStream();


            //1.读取配置请求1
            //如果是重连请求,则读取接下来5个字符,清
            //空服务端所有与该client相关的所有连接配置
            if (IsReconnect)
            {
                int    clientIdRequestLength = 2;
                byte[] clientRequestBytes    = new byte[clientIdRequestLength];
                int    resultByte0           = await nstream.ReadAsync(clientRequestBytes);

                if (resultByte0 == 0)
                {
                    CloseClient(client);
                    return(true);
                }
                //
                //CloseClient(
                CloseAllSourceByClient(StringUtil.DoubleBytesToInt(clientRequestBytes));
            }

            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.ArrageConfigIds(appRequestBytes, consumerPortBytes);
                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);
        }
Beispiel #4
0
        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,校验
            clientIdFromToken = await GetClientIdFromNextTokenBytes(client);

            //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.ArrageConfigIds(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);
        }