Esempio n. 1
0
        ArraySegment <byte> Output_OnGetFrame(DeliveryConnection output, ArraySegment <byte> data)
        {
            //(x.1)读取数据
            var byteList = output.ext as List <byte>;

            if (byteList == null)
            {
                output.ext = byteList = new List <byte>();
            }
            byteList.AddRange(data);

            if (byteList.Count < authTokenBytes.Length)
            {
                return(null);
            }

            //(x.2)匹配不通过
            if (byteList.Count != authTokenBytes.Length || !authTokenBytes.SequenceEqual(byteList))
            {
                Logger.Info($" [{output.GetHashCode()}] 权限认证-不通过");
                output.Close();
                return(null);
            }

            //(x.3)匹配通过
            Logger.Info($" [{output.GetHashCode()}] 权限认证-通过");
            output.ext        = null;
            output.OnGetFrame = null;

            //(x.4)发送验证通过标志
            output.SendFrameAsync(authTokenBytes);


            #region (x.5)进行桥接或放入连接池
            DeliveryConnection input;

            #region get input
            while (true)
            {
                if (!inputQueue.TryDequeue(out input))
                {
                    break;
                }

                if (input.IsConnected)
                {
                    break;
                }
            }
            #endregion

            if (input == null)
            {
                outputQueue.Enqueue(output);
            }
            else
            {
                input.Bind(output);
                //OutPut_SendStartMsg
                output.SendFrameAsync(StartMsg);

                Logger.Info($" [{output.GetHashCode()}] 转发成功");
            }
            #endregion

            return(null);
        }
Esempio n. 2
0
 private void Output_OnConnected(DeliveryConnection output)
 {
     output.OnGetFrame = Output_OnGetFrame;
     Logger.Info($" [{output.GetHashCode()}] 收到连接");
 }