Exemple #1
0
    public void Open(string _ip, int _port, int _timeout, Action <byte[]> _getDataCallBack, Action _disconnectCallBack, Action <bool, string> _connectOverCallBack)
    {
        getDataCallBack = _getDataCallBack;

        disconnectCallBack = _disconnectCallBack;

        connectOverCallBack = _connectOverCallBack;

        IPAddress ipa = Dns.GetHostAddresses(_ip)[0];

        socket = new Socket(ipa.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

        IPEndPoint ipe = new IPEndPoint(ipa, _port);

        IAsyncResult ar = null;

        connectStatus = CONNECT_STATUS.CONNECTING;

        try
        {
            ar = socket.BeginConnect(ipe, ConnectCallBack, null);
        }
        catch (Exception e)
        {
            Action <bool, string> dele = connectOverCallBack;

            Clear();

            dele(false, "error");

            return;
        }

        StartCoroutine(CheckConnectTimeout(ar, _timeout));
    }
Exemple #2
0
        private void ProcessNetStatus(CONNECT_STATUS st, object o)
        {
            D("processDiscovery : st : " + st + "object : " + o + "ConnectStatusCallBackHandler:" + UpdateUiHandler);
            UpdateUiHandler?.Invoke(st, new object[] { o });
            switch (st)
            {
            case CONNECT_STATUS.DISCOVERY_INIT_OK:
                break;

            case CONNECT_STATUS.DISCOVERY_GET_PCB:
                _PcbTcpServerEndPoint = (IPEndPoint)o;
                _TcpCmdClient         = new TcpCmdClient(_PcbTcpServerEndPoint);

                _TcpCmdClient.TcpStatusChangeHandler += ProcessNetStatus;
                break;

            case CONNECT_STATUS.TCP_CONNECT_OK:     //network is ok. so I open TcpServer.
                if (ProgramInfo.PCIPaddr != null && !_hasFtprun)
                {
                    FtpInstanceServer.instance.Start(ProgramInfo.FtpServerRootPath, ProgramInfo.PCIPaddr);
                    FtpInstanceServer.instance.FtpServerStatusChangeeHandler += ProcessNetStatus;
                    _hasFtprun = true;
                }
                break;

            case CONNECT_STATUS.TCP_RECEIVE_MSG:
                _RxMsgDispatch.ProcessRxMsg((string)o);
                break;

            default:
                break;
            }
        }
Exemple #3
0
    // Update is called once per frame
    void Update()
    {
        if (connectStatus == CONNECT_STATUS.CONNECTED)
        {
            connectStatus = CONNECT_STATUS.CONNECTOVER;

            connectOverCallBack(true, string.Empty);
        }
        else if (connectStatus == CONNECT_STATUS.CONNECTOVER)
        {
            if (socket.Poll(10, SelectMode.SelectRead) && socket.Available == 0)
            {
                Action dele = disconnectCallBack;

                Clear();

                dele();
            }
            else
            {
                if (socket.Available > 0)
                {
                    byte[] bytes = new byte[socket.Available];

                    socket.Receive(bytes, 0, socket.Available, SocketFlags.None);

                    getDataCallBack(bytes);
                }
            }
        }
    }
Exemple #4
0
    private void ConnectCallBack(IAsyncResult _ar)
    {
        lock (locker)
        {
            if (connectStatus == CONNECT_STATUS.CONNECTING)
            {
                socket.EndConnect(_ar);

                connectStatus = CONNECT_STATUS.CONNECTED;
            }
        }
    }
 private void CheckStatus()  // 检查当前状态
 {
     while (true)
     {
         if (_TestProject._Comm.IsOpen())
         {
             _Connect_Status = CONNECT_STATUS.Connected;
             Dispatcher.Invoke(new Action(() => { ChangeUI(CONNECT_STATUS.Connected); }));
             return;
         }
     }
 }
        private bool BootInitialize()  // 启动初始化
        {
            // 按键初始化
            _Project_Status = PROJECT_STATUS.None;
            _Plan_Status    = PLAN_STATUS.None;
            _Connect_Status = CONNECT_STATUS.Disconnected;
            ChangeUI();
            // 计划列表初始化
            cbPlanList.SelectedValuePath = "_GUID";
            cbPlanList.DisplayMemberPath = "_Name";

            return(true);
        }
Exemple #7
0
        private void UpdateUi(CONNECT_STATUS c, object[] o)
        {
            D("UpdateUi: " + c);
            if (!IsHandleCreated)
            {
                return;
            }
            switch (c)
            {
            case CONNECT_STATUS.DISCOVERY_INIT_OK:
                Invoke((MethodInvoker) delegate() {
                    AdbStatusToollable.Text = "discovery 初始化成功";
                });
                break;

            case CONNECT_STATUS.DISCOVERY_INIT_ERROR:
                Invoke((MethodInvoker) delegate() {
                    AdbStatusToollable.Text = "discovery 初始化失败";
                });
                break;

            case CONNECT_STATUS.DISCOVERY_GET_PCB:
                IPEndPoint ip = (IPEndPoint)o[0];
                Invoke((MethodInvoker) delegate() {
                    AdbStatusToollable.Text = "连接: " + ip.Address;
                });
                break;

            case CONNECT_STATUS.TCP_CONNECT_OK:
                Invoke((MethodInvoker) delegate() {
                    //statusTcpStatus.Text = "tcp 已经初始化成功";
                });
                break;

            case CONNECT_STATUS.TCP_CONNECT_ERROR:
            case CONNECT_STATUS.TCP_SEND_MSG_ERROR:
            case CONNECT_STATUS.TCP_RECV_MSG_ERROR:
                Invoke((MethodInvoker) delegate() {
                    //      statusTcpStatus.Text = "tcp 连接断开";
                });
                break;

            case CONNECT_STATUS.TCP_RECEIVE_MSG:
                break;

            default:
                break;
            }
        }
Exemple #8
0
    private void Clear()
    {
        connectStatus = CONNECT_STATUS.CLOSED;

        if (socket != null)
        {
            socket.Close();

            socket = null;
        }

        connectOverCallBack = null;

        getDataCallBack = null;

        disconnectCallBack = null;
    }
        private void ChangeUI(object _Status = null)  // 根据当前状态改变UI
        {
            if (_Status != null)
            {
                if (_Status is PROJECT_STATUS)
                {
                    _Project_Status = (PROJECT_STATUS)_Status;
                }
                else if (_Status is PLAN_STATUS)
                {
                    _Plan_Status = (PLAN_STATUS)_Status;
                }
                else if (_Status is CONNECT_STATUS)
                {
                    _Connect_Status = (CONNECT_STATUS)_Status;
                }
            }
            // 工具栏按钮
            btnCreateProject.IsEnabled = true;                                                            // 新建项目
            btnOpenProject.IsEnabled   = true;                                                            // 打开项目
            if (_Project_Status != PROJECT_STATUS.None && _Connect_Status == CONNECT_STATUS.Disconnected) // 配置
            {
                btnConfig.IsEnabled = true;
            }
            else
            {
                btnConfig.IsEnabled = false;
            }
            if (_Project_Status == PROJECT_STATUS.ConfigOnly || _Project_Status == PROJECT_STATUS.Entire)  // 连接
            {
                if (_Connect_Status == CONNECT_STATUS.Disconnected)
                {
                    btnConnect.IsEnabled = true;
                    btnConnect.ToolTip   = "连接";
                    imgBtnConnect.Source = new BitmapImage(new Uri("Images/toolbar_connect.ico", UriKind.Relative));
                }
                else if (_Connect_Status == CONNECT_STATUS.Connected || _Connect_Status == CONNECT_STATUS.Listening)
                {
                    btnConnect.IsEnabled = true;
                    btnConnect.ToolTip   = "断开连接";
                    imgBtnConnect.Source = new BitmapImage(new Uri("Images/toolbar_disconnect.ico", UriKind.Relative));
                }
            }
            else
            {
                btnConnect.IsEnabled = false;
                btnConnect.ToolTip   = "连接";
                imgBtnConnect.Source = new BitmapImage(new Uri("Images/toolbar_connect.ico", UriKind.Relative));
            }
            if (_Project_Status == PROJECT_STATUS.Entire)  // 监听
            {
                if (_Connect_Status == CONNECT_STATUS.Disconnected)
                {
                    btnListen.IsEnabled = false;
                    btnListen.ToolTip   = "开始监听";
                    imgBtnListen.Source = new BitmapImage(new Uri("Images/toolbar_start_listening.ico", UriKind.Relative));
                }
                else if (_Connect_Status == CONNECT_STATUS.Connected)
                {
                    btnListen.IsEnabled = true;
                    btnListen.ToolTip   = "开始监听";
                    imgBtnListen.Source = new BitmapImage(new Uri("Images/toolbar_start_listening.ico", UriKind.Relative));
                }
                else if (_Connect_Status == CONNECT_STATUS.Listening)
                {
                    btnListen.IsEnabled = true;
                    btnListen.ToolTip   = "结束监听";
                    imgBtnListen.Source = new BitmapImage(new Uri("Images/toolbar_stop_listening.ico", UriKind.Relative));
                }
            }
            else
            {
                btnListen.IsEnabled = false;
                btnListen.ToolTip   = "开始监听";
                imgBtnListen.Source = new BitmapImage(new Uri("Images/toolbar_start_listening.ico", UriKind.Relative));
            }
            if (_Project_Status == PROJECT_STATUS.PlanOnly || _Project_Status == PROJECT_STATUS.Entire)  // 图表
            {
                btnChart.IsEnabled = true;
            }
            else
            {
                btnChart.IsEnabled = false;
            }
            if (_Project_Status == PROJECT_STATUS.PlanOnly || _Project_Status == PROJECT_STATUS.Entire)  // 报告
            {
                btnReport.IsEnabled = true;
            }
            else
            {
                btnReport.IsEnabled = false;
            }
            if (_Project_Status == PROJECT_STATUS.PlanOnly || _Project_Status == PROJECT_STATUS.Entire)  // 清空计划
            {
                btnClear.IsEnabled = true;
            }
            else
            {
                btnClear.IsEnabled = false;
            }
            if (_Project_Status != PROJECT_STATUS.None)  // 导入
            {
                btnImport.IsEnabled = true;
            }
            else
            {
                btnImport.IsEnabled = false;
            }
            if (_Project_Status == PROJECT_STATUS.PlanOnly || _Project_Status == PROJECT_STATUS.Entire)  // 导出
            {
                btnExport.IsEnabled = true;
            }
            else
            {
                btnExport.IsEnabled = false;
            }
            btnSetting.IsEnabled = true; // 设置
            btnClose.IsEnabled   = true; // 退出

            // 测试计划栏
            if (_Project_Status != PROJECT_STATUS.None)  // 测试计划下拉框
            {
                cbPlanList.IsEnabled = true;
            }
            if (_Project_Status != PROJECT_STATUS.None)  // 添加测试计划
            {
                btnPlanAdd.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.PlanOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Plan_Status != PLAN_STATUS.None)  // 删除测试计划
            {
                btnPlanDelete.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.PlanOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Plan_Status != PLAN_STATUS.None)  // 查看测试计划
            {
                btnPlanView.IsEnabled = true;
            }
            if (_Project_Status != PROJECT_STATUS.None)  // 导入测试计划
            {
                btnPlanImport.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.PlanOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Plan_Status != PLAN_STATUS.None)  // 导出测试计划
            {
                btnPlanExport.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.PlanOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Plan_Status != PLAN_STATUS.None)  // 测试计划生成图表
            {
                btnPlanBuildChart.IsEnabled = true;
            }

            // 数据帧栏
            if ((_Project_Status != PROJECT_STATUS.PlanOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Plan_Status == PLAN_STATUS.Nonempty)  // 数据帧
            {
                lstReceiveFrameList.IsEnabled = true;
            }

            // 简单数据交互栏
            if ((_Project_Status != PROJECT_STATUS.ConfigOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                _Connect_Status == CONNECT_STATUS.Listening && chkSimpleReceived.IsChecked == true)  // 简单数据接收
            {
                txtSimpleReceived.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.ConfigOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                (_Connect_Status == CONNECT_STATUS.Connected || _Connect_Status == CONNECT_STATUS.Listening))  // 简单数据接收使能
            {
                chkSimpleReceived.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.ConfigOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                (_Connect_Status == CONNECT_STATUS.Connected || _Connect_Status == CONNECT_STATUS.Listening))  // 简单数据发送框
            {
                txtSimpleSend.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.ConfigOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                (_Connect_Status == CONNECT_STATUS.Connected || _Connect_Status == CONNECT_STATUS.Listening))  // 简单数据发送按钮
            {
                btnSimpleSend.IsEnabled = true;
            }
            if ((_Project_Status != PROJECT_STATUS.ConfigOnly || _Project_Status != PROJECT_STATUS.Entire) &&
                (_Connect_Status == CONNECT_STATUS.Connected || _Connect_Status == CONNECT_STATUS.Listening))  // 简单数据发送设置
            {
                btnSimpleSendConfig.IsEnabled = true;
            }
        }