Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
                    }
                }
            });
        }
Esempio n. 4
0
 private bool PickNextCell(int row, int col)
 {
     return(Map[row, col].ToString()[0] != prev.ToString()[0] && !MapList.Any(c => c == CellType._AVAILABLE));
 }