示例#1
0
        private void OnServerPrintUser(IScsServerClient sc, ServerPrintUserCmd cmd)
        {
            Thread.Sleep(3000);

            ServerPrintUserCmdAck ack = new ServerPrintUserCmdAck();

            ack.RepliedMessageId = cmd.MessageId;
            ack.sender_name      = this_name;
            ack.status           = 0;
            ack.print_dcm        = cmd.print_dcm;
            ack.print_report     = cmd.print_report;
            ack.print_report_ack = 0;
            ack.print_dcm_ack    = 0;

            Helper.tcp_server_send(sc, ack);
        }
示例#2
0
        private void p1_client_print(bool want_report, bool want_dcm)
        {
            bool print_dcm_ok    = false;
            bool print_report_ok = false;

            try
            {
                ui_pre_print();

                //根据实际情况更新打印需求
                want_report = want_report && this.lblReportPrintFlag.Text.Contains("打印");
                want_dcm    = want_dcm && this.lblDcmPrintFlag.Text.Contains("打印");

                //实际情况不允许打印
                if (!want_report && !want_dcm)
                {
                    return;
                }

                #region 多次打印,需身份验证
                string printer_id        = "";
                bool   need_verification = (want_report && this.lblReportPrintFlag.Text.Contains("已")) ||
                                           (want_dcm && this.lblDcmPrintFlag.Text.Contains("已"));
                if (need_verification)
                {
                    LoginUserItem item = get_login();
                    if (item == null)
                    {
                        return;
                    }

                    start_p1_tcp_client();
                    connect_p1_tcp_client(_p1_server_ip, _p1_server_port);

                    Helper.add_text(this.txtMsg,
                                    string.Format("{0}连接数据服务器P1: {1}{0}",
                                                  Environment.NewLine,
                                                  (Helper.is_tcp_client_normal(_p1_tcp_client) ? "成功" : "失败")));
                    Helper.add_text(this.txtMsg,
                                    string.Format("{0}向数据服务器P1发身份验证命令, 等待服务器P1返回结果...{0}",
                                                  Environment.NewLine));

                    //发验证命令
                    LoginCmd login = new LoginCmd();
                    login.sender_name           = this_name;
                    login.login_user.login_name = item.login_name;
                    login.login_user.login_psw  = item.login_psw;
                    LoginCmdAck login_ack = Helper.tcp_client_send_and_response(_p1_tcp_client, login) as LoginCmdAck;

                    Helper.add_text(this.txtMsg,
                                    string.Format("{0}数据服务器P1返回身份验证结果: {1}{0}",
                                                  Environment.NewLine,
                                                  (login_ack == null ? "失败" : (login_ack.status != 0 ? "失败" : "成功"))));

                    if (login_ack == null)
                    {
                        throw new MsgBoxException("通信异常", "请确认与数据服务器P1之间的网络连接是否正常.");
                    }
                    if (login_ack.status != 0)
                    {
                        throw new MsgBoxException("验证失败",
                                                  string.Format("密码错误或者工号不存在.错误代码={0}.", login_ack.status));
                    }

                    //记录工号,后面备用
                    printer_id = item.login_name;
                }
                #endregion

                //可以考虑将三项任务中的2项改为并行执行,调用线程等待这2项任务的返回结果
                Task <bool> task_dcm    = null;
                Task <bool> task_report = null;
                #region 胶片本地打印
                if (is_local_print_dcm && want_dcm)
                {
                    task_dcm = Task.Factory.StartNew(() => {
                        return(local_print_dcm(this.lblUserID.Text.Trim(), printer_id));
                    });
                }
                #endregion
                #region 报告本地打印
                if (is_local_print_report && want_report)
                {
                    task_report = Task.Factory.StartNew(() => {
                        return(local_print_report(this.lblUserID.Text.Trim(), printer_id));
                    });
                }
                #endregion
                #region 报告和(/或者)胶片用服务器打印
                try
                {
                    if ((!is_local_print_report && want_report) ||
                        (!is_local_print_dcm && want_dcm))
                    {
                        Helper.add_text(this.txtMsg,
                                        string.Format("{0}连接数据服务器P1: {1}{0}",
                                                      Environment.NewLine,
                                                      (Helper.is_tcp_client_normal(_p1_tcp_client) ? "成功" : "失败")));

                        string which = "";
                        if ((!is_local_print_report && want_report) &&
                            (!is_local_print_dcm && want_dcm))
                        {
                            which = "报告和胶片";
                        }
                        else if (!is_local_print_report && want_report)
                        {
                            which = "报告";
                        }
                        else
                        {
                            which = "胶片";
                        }
                        Helper.add_text(this.txtMsg,
                                        string.Format("{1}向数据服务器P1发打印{0}命令, 等待服务器P1返回结果...{1}",
                                                      which, Environment.NewLine));

                        start_p1_tcp_client();
                        connect_p1_tcp_client(_p1_server_ip, _p1_server_port);

                        //发打印命令
                        ServerPrintUserCmd spuc = new ServerPrintUserCmd();
                        spuc.sender_name  = this_name;
                        spuc.user_id      = this.lblUserID.Text.Trim();
                        spuc.printer_id   = printer_id;
                        spuc.print_dcm    = !is_local_print_dcm && want_dcm;
                        spuc.print_report = !is_local_print_report && want_report;
                        ServerPrintUserCmdAck spuc_ack = Helper.tcp_client_send_and_response(_p1_tcp_client, spuc, 60000) as ServerPrintUserCmdAck;

                        Helper.add_text(this.txtMsg,
                                        string.Format("{0}数据服务器P1返回打印结果: {1}{0}",
                                                      Environment.NewLine, (spuc_ack == null ? "失败" : "成功")));

                        if (spuc_ack == null)
                        {
                            throw new MsgBoxException("通信异常", "请确认与数据服务器P1之间的网络连接是否正常.");
                        }
                        if (spuc_ack.print_dcm)
                        {
                            Helper.add_text(this.txtMsg,
                                            string.Format("{0}打印胶片: {1}{0}",
                                                          Environment.NewLine,
                                                          (spuc_ack.print_dcm_ack == 0 ? "成功" : "失败")));
                        }
                        if (spuc_ack.print_report)
                        {
                            Helper.add_text(this.txtMsg,
                                            string.Format("{0}打印报告: {1}{0}",
                                                          Environment.NewLine,
                                                          (spuc_ack.print_report_ack == 0 ? "成功" : "失败")));
                        }

                        if (spuc_ack.print_dcm)
                        {
                            print_dcm_ok = (spuc_ack.print_dcm_ack == 0);
                        }
                        if (spuc_ack.print_report)
                        {
                            print_report_ok = (spuc_ack.print_report_ack == 0);
                        }
                    }
                }
                catch (MsgBoxException ex)
                {
                    Helper.add_text(this.txtMsg,
                                    string.Format("{0}{1}, {2}{0}",
                                                  Environment.NewLine, ex.Title, ex.Message));
                }
                catch (System.Exception ex)
                {
                    EzLogger.GlobalLogger.warning(string.Format("{0}{2}{1}{2}",
                                                                ex.Message, ex.StackTrace, Environment.NewLine));
                }
                #endregion
                if (task_dcm != null)
                {
                    task_dcm.Wait();
                    print_dcm_ok = task_dcm.Result;
                }
                if (task_report != null)
                {
                    task_report.Wait();
                    print_report_ok = task_report.Result;
                }
            }
            catch (MsgBoxException ex)
            {
                Helper.add_text(this.txtMsg,
                                string.Format("{0}{1}, {2}{0}",
                                              Environment.NewLine, ex.Title, ex.Message));
            }
            catch (System.Exception ex)
            {
                EzLogger.GlobalLogger.warning(string.Format("{0}{2}{1}{2}",
                                                            ex.Message, ex.StackTrace, Environment.NewLine));
            }
            finally
            {
                stop_p1_tcp_client();

                ui_post_print(print_dcm_ok, print_report_ok);
            }
        }