void Output_OnConnected(DeliveryConnection output) { output.Conn_OnDisconnected = (conn) => { StartNewOutput(); }; output.OnGetFrame = Output_WaitForAuth; //(x.2)send token output.SendFrameAsync(authTokenBytes); }
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); }