static void OnPackageReceived(object sender, PackageEventArgs <NatPackageInfo> e) { switch (e.Package.FunCode) { case 0x1: { //注册包回复 HandleLog.WriteLine($"主机密钥验证成功!"); if (MapList.Any()) { foreach (var item in MapList) { HandleLog.WriteLine($"【{item.name}】映射成功:{item.local} --> {item.remote}"); } } else { HandleLog.WriteLine($"端口映射列表为空,请到管理后台创建映射!"); } } break; case 0x3: { //http请求 HandleRequest(e); } break; case 0x4: { //Map变动 var map = JsonHelper.Instance.Deserialize <Map>(e.Package.BodyRaw); ChangeMap(map); } break; case 0x5: { //服务端消息 var msg = JsonHelper.Instance.Deserialize <ReturnResult <bool> >(e.Package.BodyRaw); IsStop = msg.Result; HandleLog.WriteLine(msg.Message); } break; } }
private void TryPickAgain(int row, int col) { CheckDirection(row, col, -1, -1); CheckDirection(row, col, -1, 1); CheckDirection(row, col, 1, -1); CheckDirection(row, col, 1, 1); if (MapList.Any(c => c == CellType._AVAILABLE)) { picked = new PickedCell { Row = row, Col = col, Type = Map[row, col] }; prev = Map[row, col]; curr = Map[row, col]; canPickAnother = false; ChangeOnFront?.Invoke(); } else { canPickAnother = true; } }
static void OnPackageReceived(object sender, PackageEventArgs <NatPackageInfo> e) { Task.Run(() => { if (e.Package.Mode == 0x1)//nat { switch (e.Package.FunCode) { case 0x1: { //注册包回复 HandleLog.WriteLine($"主机密钥验证成功!"); if (MapList.Any()) { foreach (var item in MapList) { HandleLog.WriteLine($"【{item.name}】映射成功:{item.local_endpoint} --> {item.remote_endpoint}"); } } else { HandleLog.WriteLine($"端口映射列表为空,请到管理后台创建映射!"); } } break; case 0x4: { //Map变动 var map = JsonHelper.Instance.Deserialize <Map>(e.Package.BodyRaw); ChangeMap(map); } break; case 0x5: { //服务端消息 var msg = JsonHelper.Instance.Deserialize <ReturnResult <bool> >(e.Package.BodyRaw); IsStop = msg.Result; HandleLog.WriteLine(msg.Message); } break; } } else if (e.Package.Mode == 0x2)//http { switch (e.Package.FunCode) { case 0x1: { //http请求 HandleRequest(e); } break; } } else if (e.Package.Mode == 0x3)//tcp { var packJson = JsonHelper.Instance.Deserialize <PackJson>(e.Package.BodyRaw); switch (e.Package.FunCode) { case 0x1: { //tcp注册包 发起连接到内网服务器 TcpClientList.Add(new TcpClientInfo(packJson, NatClient)); } break; case 0x2: { //03 02 数据长度(4) 正文数据(n) ---tcp响应包 mark: var client = TcpClientList.Find(c => c.PackJson.UserId == packJson.UserId); if (client == null) { Thread.Sleep(1); goto mark; } if (client.TcpClient == null) { Thread.Sleep(1); goto mark; } if (client.TcpClient.IsConnected == false) { Thread.Sleep(1); goto mark; } //先讲16进制字符串转为byte数组 再gzip解压 var request = DataHelper.Decompress(packJson.Content); //发送原始包 if (client.TcpClient.IsConnected) { client.TcpClient.Send(request); HandleLog.WriteLine($"----> {client.PackJson.UserId} 发送报文{request.Length}字节"); } } break; case 0x3: { //03 03 数据长度(4) 正文数据(n) ---tcp连接关闭包 var client = TcpClientList.Find(c => c.PackJson.UserId == packJson.UserId); if (client == null) { return; } if (client.TcpClient == null || client.TcpClient.IsConnected == false) { TcpClientList.RemoveAll(c => c.PackJson.UserId == packJson.UserId); return; } client.TcpClient.Close(); HandleLog.WriteLine($"本地连接【{client.PackJson.UserId},{client.LocalEndPoint}】关闭成功"); } break; } } }); }
private bool PickNextCell(int row, int col) { return(Map[row, col].ToString()[0] != prev.ToString()[0] && !MapList.Any(c => c == CellType._AVAILABLE)); }