ArraySegment <byte> Output_WaitForStartMsg(DeliveryConnection output, ArraySegment <byte> data) { output.OnGetFrame = null; Output_OnReceiveStartMsg(output, data.Slice(1)); return(null); }
void Input_OnConnected(DeliveryConnection input) { DeliveryConnection output; #region get output while (true) { if (!outputQueue.TryDequeue(out output)) { break; } if (output.IsConnected) { break; } } #endregion if (output == null) { inputQueue.Enqueue(input); } else { input.Bind(output); //OutPut_SendStartMsg output.SendFrameAsync(StartMsg); Logger.Info($" [{output.GetHashCode()}] 转发成功"); } }
void Output_OnConnected(DeliveryConnection output) { output.Conn_OnDisconnected = (conn) => { StartNewOutput(); }; output.OnGetFrame = Output_WaitForAuth; //(x.2)send token output.SendFrameAsync(authTokenBytes); }
void ServerOnInputConnected(DeliveryConnection conn) { string RemoteEndPoint = null; try { RemoteEndPoint = conn.socket?.RemoteEndPoint.ToString(); client.Connect((conn2) => { conn.Bind(conn2); Logger.Info("转发成功[" + RemoteEndPoint + "]"); }); } catch (Exception ex) { Logger.Error("转发失败[" + RemoteEndPoint + "]", ex); } }
void Output_OnReceiveStartMsg(DeliveryConnection output, ArraySegment <byte> data) { StartNewOutput(); localClient.Connect((local) => { try { if (data.Count != 0) { local.SendFrameAsync(data); } } catch (Exception ex) { Logger.Error(ex); } local.Bind(output); }); }
ArraySegment <byte> Output_WaitForAuth(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); } #region (x.2)收到数据的长度 等于 token长度 if (byteList.Count == authTokenBytes.Length) { if (authTokenBytes.SequenceEqual(byteList)) { //权限认证通过 Logger.Info("发起连接--成功-权限认证通过"); output.ext = null; output.OnGetFrame = Output_WaitForStartMsg; return(null); } else { //权限认证不通过 Logger.Info("收到连接-失败-权限认证不通过"); output.ext = null; output.OnGetFrame = null; output.Close(); return(null); } } #endregion #region (x.3)收到数据的长度 大于 token长度 if (authTokenBytes.SequenceEqual(byteList.Take(authTokenBytes.Length))) { //权限认证通过 且已经接受到开始标志 Logger.Info("发起连接--成功-权限认证通过"); output.ext = null; output.OnGetFrame = null; Output_OnReceiveStartMsg(output, byteList.Skip(authTokenBytes.Length + 1).ToArray()); return(null); } else { //权限认证不通过 Logger.Info("收到连接-失败-权限认证不通过"); output.ext = null; output.OnGetFrame = null; output.Close(); return(null); } #endregion }
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); }
private void Output_OnConnected(DeliveryConnection output) { output.OnGetFrame = Output_OnGetFrame; Logger.Info($" [{output.GetHashCode()}] 收到连接"); }