コード例 #1
0
ファイル: Terminal.cs プロジェクト: luneo7/terminal3270
 void emu_Disconnected(TNEmulator where, string Reason)
 {
     Disconnect();
     this.IsConnected = false;
     this.IsConnecting = false;
     this.ScreenText = Reason;
 }
コード例 #2
0
        TNEmulator ConnectAndLogin(string user, string pass, string ip, int port)
        {
            CloseTerminal();
            TNEmulator emulator = new TNEmulator();

            emulator.Debug                 = false;
            emulator.Config.TermType       = "IBM-3278-2-E";
            emulator.Config.FastScreenMode = true;
            emulator.Connect(ip, port, null);
            if (!emulator.WaitForText(0, 5, "THIS TERMINAL IS LOGGED ON", _timeout))
            {
                throw new Exception("Erro ao logar, não encontrada mensagem: THIS TERMINAL IS LOGGED ON");
            }
            emulator.SendText("0cicabnpt");
            emulator.SendKey(true, TnKey.Enter, _timeout);
            emulator.SendKey(true, TnKey.Enter, _timeout);

            if (!emulator.WaitForText(1, 2, "WELCOME TO CICS", _timeout))
            {
                throw new Exception("Erro ao logar, não encontrada mensagem: WELCOME TO CICS");
            }

            WriteTextToField(emulator.CurrentScreenXML.Fields[18], emulator, user);
            WriteTextToField(emulator.CurrentScreenXML.Fields[25], emulator, pass);
            emulator.SendKey(true, TnKey.Enter, _timeout);
            emulator.WaitForHostSettle(100, _timeout);
            emulator.SendKey(true, TnKey.Enter, _timeout);

            if (!emulator.WaitForText(5, 0, "CICS-SSO", _timeout))
            {
                throw new Exception("Erro ao logar, não encontrada mensagem: CICS-SSO");
            }
            return(emulator);
        }
コード例 #3
0
        public void connectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (connectToolStripMenuItem.Text == "Connect")
            {
                if (string.IsNullOrEmpty(_host) || string.IsNullOrEmpty(_port))
                {
                    MessageBox.Show("Please provide a Host and Port.");
                    return;
                }

                _terminalType = string.IsNullOrEmpty(_terminalType) ? null : _terminalType;

                if (OpenEmulator.Connect(_host, int.Parse(_port), _terminalType, _useSsl))
                {
                    TN3270 = OpenEmulator.TN3270;
                    Text   = $"Terminal (Connected) - Host: {_host} - Port: {_port}";
                    connectToolStripMenuItem.Text = "Disconnect";
                }
            }
            else
            {
                OpenEmulator.Disconnect();
                TN3270 = null;
                Text   = "Terminal (Disconnected)";
                connectToolStripMenuItem.Text = "Connect";
            }
        }
コード例 #4
0
        public void Run()
        {
            TNEmulator emulator = new TNEmulator();

            emulator.Audit                 = this;
            emulator.Debug                 = false;
            emulator.Config.TermType       = "IBM-3278-2-E";
            emulator.Config.FastScreenMode = true;

            emulator.Connect("localhost", 3270, null);
            // wait for the host to startup
            //
            if (emulator.WaitForTextOnScreen(2000, "Multi-User System for Interactive Computing / System Product", "MUSIC/SP ESA/390") == -1)
            {
                Console.WriteLine("Connection failed - didn't find 'LIBRARY OF CONGRESS' on screen");
                Console.WriteLine(emulator.CurrentScreenXML.Dump());
                return;
            }
            //
            //
            //
            emulator.Refresh(true, 20000);
            bool done = false;

            do
            {
                string currentScreen = emulator.CurrentScreenXML.Dump();
                Console.WriteLine(currentScreen);


                Console.WriteLine("Enter command : - refresh, text <text>, key <key>, quit");
                Console.WriteLine("key is one of : Attn, Backspace,BackTab,CircumNot,Clear,CursorSelect,Delete,DeleteField, DeleteWord,Down,Dup,Enter,Erase,EraseEOF,EraseInput,FieldEnd, FieldMark,FieldExit,Home,Insert,Interrupt,Key,Left,Left2,Newline,NextWord, PAnn, PFnn, PreviousWord,Reset,Right,Right2,SysReq,Tab,Toggle,ToggleInsert,ToggleReverse,Up");

                string command = Console.ReadLine();
                if (command == "quit")
                {
                    done = true;
                }
                else if (command == "refresh")
                {
                    emulator.Refresh(false, 0);
                }
                else if (command.Length > 4 && command.Substring(0, 4) == "key ")
                {
                    emulator.SendKeyFromText(true, command.Substring(4));
                }
                else if (command.Length > 5 && command.Substring(0, 5) == "text ")
                {
                    emulator.SendText(command.Substring(5));
                }
                else
                {
                    Console.WriteLine("unknown command '" + command + "'");
                }
            }while (!done);
            emulator.Close();
        }
コード例 #5
0
 public void Disconnect()
 {
     try
     {
         Emulator3270?.Close();
         Emulator3270 = null;
         _emulator    = null;
     }
     finally
     {
         isConnected = false;
     }
 }
コード例 #6
0
        void ResetToMainMenu(TNEmulator emulator)
        {
            int count = 0;

            while (count <= _maxRetries)
            {
                emulator.WaitForHostSettle(50, _timeout);
                if (emulator.CurrentScreenXML.Dump().Contains("Aymore Financiamentos"))
                {
                    return;
                }
                count++;
            }
            throw new Exception("Erro ao retornar ao menu principal, não encontrada mensagem: Aymore Financiamentos");
        }
コード例 #7
0
 private Emulator()
 {
     Emulator3270 = new TNEmulator();
 }
コード例 #8
0
 private void WriteTextToField(Open3270.TN3270.XMLScreenField field, TNEmulator emulator, string text)
 {
     emulator.SetText(text, field.Location.left, field.Location.top);
 }
コード例 #9
0
 private void emu_Disconnected(TNEmulator where, string Reason)
 {
     IsConnected  = false;
     IsConnecting = false;
     ScreenText   = Reason;
 }
コード例 #10
0
 public Terminal()
 {
     emu = new TNEmulator();
     emu.Disconnected          += emu_Disconnected;
     emu.CursorLocationChanged += emu_CursorLocationChanged;
 }
コード例 #11
0
        public List <string> AutorizarDispensaJuros(TNEmulator emulator)
        {
            List <string> contratosAprovados = new List <string>();

            ResetToMainMenu(emulator);
            //string menuOption = "";
            //for (int i = 0; i < emulator.CurrentScreenXML.Fields.Length; i++)
            //{
            //if (emulator.CurrentScreenXML.Fields[3].Text != null)
            //{
            WriteTextToField(emulator.CurrentScreenXML.Fields[3], emulator, "ocal");
            emulator.SendKey(true, TnKey.Enter, _timeout);
            Console.Write(emulator.CurrentScreenXML.Dump());

            //break;
            //}
            //}

            WriteTextToField(emulator.CurrentScreenXML.Fields[22], emulator, "20026731403");

            emulator.SendKey(true, TnKey.Enter, _timeout);

            emulator.SendKey(true, TnKey.F2, _timeout);

            //Nomecliente = emulator.CurrentScreenXML.Fields[21].Text;



            Nomecliente = emulator.CurrentScreenXML.Fields[21].Text;

            TelaRegistro tl = new TelaRegistro();

            tl.NomeC.Text = Nomecliente;

            //TelaRegistro reg = new TelaRegistro();
            //reg.NomeC.Text = Nomecliente

            //DialogResult result6 = MessageBox.Show(tl.NomeC.Text, "Facilita", MessageBoxButtons.OK, MessageBoxIcon.Warning);


            //WriteTextToField(emulator.CurrentScreenXML.Fields[21].Text, "");
            Console.Write(emulator.CurrentScreenXML.Dump());



            //if (string.IsNullOrEmpty(menuOption))
            //    throw new Exception("Erro ao autorizar despesa, não foi possível encontrar a opção do menu");
            //emulator.SetText(menuOption);
            //emulator.SendKey(true, TnKey.Enter, _timeout);
            //emulator.SendKey(true, TnKey.Enter, _timeout);
            //if (!emulator.WaitForText(27, 1, "ATENDIMENTO AO CLIENTE", _timeout))
            //    throw new Exception("Erro ao logar, não encontrada mensagem: ATENDIMENTO AO CLIENTE");
            //emulator.WaitForHostSettle(200, _timeout);
            //emulator.SetText("16");
            //emulator.SendKey(true, TnKey.Enter, _timeout);
            //WriteTextToField(emulator.CurrentScreenXML.Fields[18], emulator, "10");
            //WriteTextToField(emulator.CurrentScreenXML.Fields[38], emulator, "i");
            //WriteTextToField(emulator.CurrentScreenXML.Fields[46], emulator, "2");
            //WriteTextToField(emulator.CurrentScreenXML.Fields[67], emulator, "1235");
            //if (!emulator.SendKey(true, TnKey.Enter, _timeout))
            //    throw new Exception("Timeout ao entrar na tela de dispensa de juros");
            //if (String.IsNullOrEmpty(emulator.CurrentScreenXML.Fields[45].Text))
            //{
            //    Console.Clear();
            //    Console.Write(emulator.CurrentScreenXML.Dump());
            //    return contratosAprovados;
            //}
            //else
            //{

            //    //12 linhas, com 12 campos por linha
            //    for (int i = 45; i < 45 + (12 * 12); i += 12)
            //    {
            //        //i = index contrato
            //        //aprovacao = i-1
            //        //taxa = i+7
            //        if (!String.IsNullOrEmpty(emulator.CurrentScreenXML.Fields[i].Text))
            //        {
            //            if (float.TryParse(emulator.CurrentScreenXML.Fields[i + 7].Text, out float taxa))
            //            {
            //                if (taxa <= 100)
            //                {
            //                    contratosAprovados.Add(emulator.CurrentScreenXML.Fields[i].Text);
            //                    WriteTextToField(emulator.CurrentScreenXML.Fields[i - 1], emulator, "a");
            //                }
            //                else
            //                {

            //                    // DESCOMENTAR PARA REPROVAR SE FOR MAIOR QUE 100%
            //                    //WriteTextToField(emulator.CurrentScreenXML.Fields[i - 1], emulator, "r");
            //                    //contratosAprovados.Add("r"+emulator.CurrentScreenXML.Fields[i].Text);
            //                }
            //            }
            //        }



            //    }
            //    Console.Clear();
            //    Console.Write(emulator.CurrentScreenXML.Dump());
            //    if (contratosAprovados.Any())
            //    {

            //        emulator.SendKey(true, TnKey.F5, _timeout);
            //    }

            //}


            return(contratosAprovados);
        }
コード例 #12
0
        public void Run()
        {
            TNEmulator emulator = new TNEmulator();

            emulator.Audit                 = this;
            emulator.Debug                 = true;
            emulator.Config.TermType       = "IBM-3278-2-E";
            emulator.Config.FastScreenMode = true;
            emulator.Config.UseSSL         = true;
            emulator.Connect("ssl3270.nccourts.org", 2023, null);

            var index = emulator.WaitForTextOnScreen2(2000, "COURT INFORMATION SYSTEM");

            Console.WriteLine("Index = x=" + index.x + " y=" + index.y);
            return;

            // wait for the host to startup
            //
            if (!emulator.WaitForText(22, 0, "LIBRARY OF CONGRESS", 20000))
            {
                Console.WriteLine("Connection failed - didn't find 'LIBRARY OF CONGRESS' on screen");
                Console.WriteLine(emulator.CurrentScreenXML.Dump());
                return;
            }
            //
            //
            //
            emulator.Refresh(true, 20000);
            bool done = false;

            do
            {
                string currentScreen = emulator.CurrentScreenXML.Dump();
                Console.WriteLine(currentScreen);


                Console.WriteLine("Enter command : - refresh, text <text>, key <key>, quit");
                Console.WriteLine("key is one of : Attn, Backspace,BackTab,CircumNot,Clear,CursorSelect,Delete,DeleteField, DeleteWord,Down,Dup,Enter,Erase,EraseEOF,EraseInput,FieldEnd, FieldMark,FieldExit,Home,Insert,Interrupt,Key,Left,Left2,Newline,NextWord, PAnn, PFnn, PreviousWord,Reset,Right,Right2,SysReq,Tab,Toggle,ToggleInsert,ToggleReverse,Up");

                string command = Console.ReadLine();
                if (command == "quit")
                {
                    done = true;
                }
                else if (command == "refresh")
                {
                    emulator.Refresh(false, 0);
                }
                else if (command.Length > 4 && command.Substring(0, 4) == "key ")
                {
                    emulator.SendKeyFromText(true, command.Substring(4));
                }
                else if (command.Length > 5 && command.Substring(0, 5) == "text ")
                {
                    emulator.SendText(command.Substring(5));
                }
                else
                {
                    Console.WriteLine("unknown command '" + command + "'");
                }
            }while (!done);
            emulator.Close();
        }
コード例 #13
0
        public void Run()
        {
            using (TNEmulator emulator = new TNEmulator())
            {
                emulator.Audit                           = this;
                emulator.Debug                           = false;
                emulator.Config.TermType                 = "IBM-3278-2-E";
                emulator.Config.FastScreenMode           = true;
                emulator.Config.AlwaysRefreshWhenWaiting = false;

                emulator.Connect("localhost", 3270, null);
                // wait for the host to startup
                //
                int index = emulator.WaitForTextOnScreen(1000, "Hercules", "Multi-User System for Interactive Computing / System Product");

                if (index == 0)
                {
                    Console.WriteLine("Mainframe emulator isn't running MUSIC/SP properly - check readme.md file in TestMainframe project for help");
                    return;
                }

                if (index == -1)
                {
                    Console.WriteLine("Connection failed - didn't find 'Multi-User System for Interactive Computing / System Product' on screen");
                    Console.WriteLine(emulator.CurrentScreenXML.Dump());
                    return;
                }
                try
                {
                    //
                    //
                    //
                    //emulator.Refresh(true, 20000);
                    emulator.SendKey(false, TnKey.Enter, 0);
                    index = emulator.WaitForTextOnScreen(2000, "*MUSIC/SP ESA/390, sign on");
                    Console.WriteLine("Response : " + index);
                    if (index != 0)
                    {
                        Console.WriteLine(emulator.CurrentScreenXML.Dump());
                        Console.WriteLine("ERROR : Failed to find login form failed");
                        return;
                    }
                    //emulator.SendKey(true, TnKey.Enter, 10000);
                    //emulator.WaitForHostSettle(100, 10000);
                    emulator.SetText("$000");
                    emulator.SendKey(false, TnKey.Tab, 0);
                    emulator.SetText("music");
                    emulator.SendKey(false, TnKey.Enter, 0);
                    index = emulator.WaitForTextOnScreen(10000, "Press ENTER to continue...", "Userid is already signed on");
                    Console.WriteLine("Response : " + index);
                    if (index != 0)
                    {
                        Console.WriteLine(emulator.CurrentScreenXML.Dump());
                        Console.WriteLine("ERROR : Login failed");
                        return;
                    }
                    emulator.SendKey(false, TnKey.Enter, 0);
                    index = emulator.WaitForTextOnScreen(10000, "Support Tasks: ADMIN Main Menu");
                    Console.WriteLine("Response : " + index);
                    if (index != 0)
                    {
                        Console.WriteLine(emulator.CurrentScreenXML.Dump());
                        Console.WriteLine("ERROR : Failed to get to main menu");
                        return;
                    }
                    Console.WriteLine(emulator.CurrentScreenXML.Dump());
                    string timeText = emulator.GetText(65, 4, 15).Trim();
                    Console.WriteLine("Success! Scraped current mainframe time as : >>>" + timeText + "<<<");

                    return;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("EX: " + ex);
                    Console.WriteLine(emulator.CurrentScreenXML.Dump());
                }

                //emulator.Refresh(true, 20000);

                bool done = false;
                do
                {
                    string currentScreen = emulator.CurrentScreenXML.Dump();
                    Console.WriteLine("DUMP SCREEN\n=============\n" + currentScreen + "\n=========\n");

                    Console.WriteLine("Enter command : - refresh, text <text>, key <key>, quit");
                    Console.WriteLine("key is one of : Attn, Backspace,BackTab,CircumNot,Clear,CursorSelect,Delete,DeleteField, DeleteWord,Down,Dup,Enter,Erase,EraseEOF,EraseInput,FieldEnd, FieldMark,FieldExit,Home,Insert,Interrupt,Key,Left,Left2,Newline,NextWord, PAnn, PFnn, PreviousWord,Reset,Right,Right2,SysReq,Tab,Toggle,ToggleInsert,ToggleReverse,Up");

                    string command = Console.ReadLine();
                    if (command == "quit")
                    {
                        done = true;
                    }
                    else if (command == "refresh")
                    {
                        emulator.Refresh(false, 0);
                    }
                    else if (command.Length > 4 && command.Substring(0, 4) == "key ")
                    {
                        emulator.SendKeyFromText(true, command.Substring(4));
                    }
                    else if (command.Length > 5 && command.Substring(0, 5) == "text ")
                    {
                        emulator.SendText(command.Substring(5));
                    }
                    else
                    {
                        Console.WriteLine("unknown command '" + command + "'");
                    }
                }while (!done);
                emulator.Close();
            }
        }