Commit 0d3245a825a4d2144893e369ee0c977da74011e5
1 parent
828f2c8c
Exists in
master
and in
1 other branch
Adding action object required for the python extension.
Showing
10 changed files
with
120 additions
and
13 deletions
Show diff stats
client/ipcclient.cbp
| @@ -68,6 +68,7 @@ | @@ -68,6 +68,7 @@ | ||
| 68 | <Unit filename="src/host/string.cc" /> | 68 | <Unit filename="src/host/string.cc" /> |
| 69 | <Unit filename="src/include/ipc-client-internals.h" /> | 69 | <Unit filename="src/include/ipc-client-internals.h" /> |
| 70 | <Unit filename="src/include/lib3270/ipc.h" /> | 70 | <Unit filename="src/include/lib3270/ipc.h" /> |
| 71 | + <Unit filename="src/include/lib3270/ipc/action.h" /> | ||
| 71 | <Unit filename="src/include/lib3270/ipc/request.h" /> | 72 | <Unit filename="src/include/lib3270/ipc/request.h" /> |
| 72 | <Unit filename="src/session/get.cc" /> | 73 | <Unit filename="src/session/get.cc" /> |
| 73 | <Unit filename="src/session/local/actions.cc" /> | 74 | <Unit filename="src/session/local/actions.cc" /> |
client/src/core/constants.cc
| @@ -50,7 +50,7 @@ TN3270_PUBLIC const char * getRevision() { | @@ -50,7 +50,7 @@ TN3270_PUBLIC const char * getRevision() { | ||
| 50 | return LIB3270_STRINGIZE_VALUE_OF(PACKAGE_RELEASE); | 50 | return LIB3270_STRINGIZE_VALUE_OF(PACKAGE_RELEASE); |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | -TN3270_PUBLIC const char * toCharString(const TN3270::Action action) { | 53 | +TN3270_PUBLIC const char * toCharString(const TN3270::KeyboardAction action) { |
| 54 | 54 | ||
| 55 | static const char * actions[] = { | 55 | static const char * actions[] = { |
| 56 | "enter", | 56 | "enter", |
client/src/core/session.cc
| @@ -439,6 +439,11 @@ | @@ -439,6 +439,11 @@ | ||
| 439 | value = getAttribute(name).getBoolean(); | 439 | value = getAttribute(name).getBoolean(); |
| 440 | } | 440 | } |
| 441 | 441 | ||
| 442 | + /// @brief Create an action object | ||
| 443 | + Action * Session::getAction(const LIB3270_ACTION *descriptor) { | ||
| 444 | + throw std::system_error(ENOTSUP, std::system_category()); | ||
| 445 | + } | ||
| 446 | + | ||
| 442 | 447 | ||
| 443 | } | 448 | } |
| 444 | 449 |
client/src/include/lib3270/ipc.h
| @@ -68,6 +68,7 @@ | @@ -68,6 +68,7 @@ | ||
| 68 | 68 | ||
| 69 | class Host; | 69 | class Host; |
| 70 | class Controller; | 70 | class Controller; |
| 71 | + class Action; | ||
| 71 | 72 | ||
| 72 | #define DEFAULT_TIMEOUT 5 | 73 | #define DEFAULT_TIMEOUT 5 |
| 73 | 74 | ||
| @@ -222,8 +223,8 @@ | @@ -222,8 +223,8 @@ | ||
| 222 | PA_3 | 223 | PA_3 |
| 223 | }; | 224 | }; |
| 224 | 225 | ||
| 225 | - /// @brief LIB3270 Action. | ||
| 226 | - enum Action : uint8_t { | 226 | + /// @brief Keyboard Actions. |
| 227 | + enum KeyboardAction : uint8_t { | ||
| 227 | ENTER, ///< @brief Enter key | 228 | ENTER, ///< @brief Enter key |
| 228 | ERASE, | 229 | ERASE, |
| 229 | ERASE_EOF, | 230 | ERASE_EOF, |
| @@ -436,7 +437,7 @@ | @@ -436,7 +437,7 @@ | ||
| 436 | 437 | ||
| 437 | void push(const PFKey key); | 438 | void push(const PFKey key); |
| 438 | void push(const PAKey key); | 439 | void push(const PAKey key); |
| 439 | - virtual void push(const Action action) = 0; | 440 | + virtual void push(const KeyboardAction action) = 0; |
| 440 | 441 | ||
| 441 | /// @brief Get contents of field ad address. | 442 | /// @brief Get contents of field ad address. |
| 442 | virtual void pop(int baddr, std::string &text) = 0; | 443 | virtual void pop(int baddr, std::string &text) = 0; |
| @@ -541,8 +542,6 @@ | @@ -541,8 +542,6 @@ | ||
| 541 | /// @brief Set local charset. | 542 | /// @brief Set local charset. |
| 542 | virtual void setCharSet(const char *charset = NULL) = 0; | 543 | virtual void setCharSet(const char *charset = NULL) = 0; |
| 543 | 544 | ||
| 544 | - // Actions | ||
| 545 | - | ||
| 546 | /// @brief Execute action by name. | 545 | /// @brief Execute action by name. |
| 547 | virtual void action(const char *action_name) = 0; | 546 | virtual void action(const char *action_name) = 0; |
| 548 | 547 | ||
| @@ -583,7 +582,8 @@ | @@ -583,7 +582,8 @@ | ||
| 583 | /// @brief Insert event listener. | 582 | /// @brief Insert event listener. |
| 584 | // void insert(Event::Type type, std::function <void(const Event &event)> listener); | 583 | // void insert(Event::Type type, std::function <void(const Event &event)> listener); |
| 585 | 584 | ||
| 586 | - // Misc | 585 | + /// @brief Create an action object |
| 586 | + virtual Action * getAction(const LIB3270_ACTION *descriptor); | ||
| 587 | 587 | ||
| 588 | /// @brief Search | 588 | /// @brief Search |
| 589 | size_t find(const char * str, size_t pos = 0) const; | 589 | size_t find(const char * str, size_t pos = 0) const; |
| @@ -899,7 +899,7 @@ | @@ -899,7 +899,7 @@ | ||
| 899 | /// @param The action code. | 899 | /// @param The action code. |
| 900 | /// | 900 | /// |
| 901 | /// @return The action description. | 901 | /// @return The action description. |
| 902 | - TN3270_PUBLIC const char * toCharString(const TN3270::Action action); | 902 | + TN3270_PUBLIC const char * toCharString(const TN3270::KeyboardAction action); |
| 903 | 903 | ||
| 904 | template <typename T> | 904 | template <typename T> |
| 905 | inline TN3270_PUBLIC TN3270::Session & operator<<(TN3270::Session& session, const T value) { | 905 | inline TN3270_PUBLIC TN3270::Session & operator<<(TN3270::Session& session, const T value) { |
| @@ -0,0 +1,61 @@ | @@ -0,0 +1,61 @@ | ||
| 1 | +/* | ||
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
| 5 | + * | ||
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 7 | + * | ||
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 10 | + * Free Software Foundation. | ||
| 11 | + * | ||
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 15 | + * obter mais detalhes. | ||
| 16 | + * | ||
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 20 | + * | ||
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
| 22 | + * | ||
| 23 | + * Contatos: | ||
| 24 | + * | ||
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
| 27 | + * | ||
| 28 | + */ | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * @file lib3270/ipc/action.h | ||
| 32 | + * | ||
| 33 | + * @brief Declares the TN3270 IPC Action object. | ||
| 34 | + * | ||
| 35 | + * @author perry.werneck@gmail.com | ||
| 36 | + * | ||
| 37 | + */ | ||
| 38 | + | ||
| 39 | +#ifndef IPC3270_ACTION_H_INCLUDED | ||
| 40 | + | ||
| 41 | + #define IPC3270_ACTION_H_INCLUDED | ||
| 42 | + | ||
| 43 | + #include <lib3270/ipc.h> | ||
| 44 | + | ||
| 45 | + namespace TN3270 { | ||
| 46 | + | ||
| 47 | + /// @brief TN3270 Action | ||
| 48 | + class TN3270_PUBLIC Action { | ||
| 49 | + public: | ||
| 50 | + virtual bool activatable() const noexcept = 0; | ||
| 51 | + virtual void activate() = 0; | ||
| 52 | + | ||
| 53 | + inline operator bool() const noexcept { | ||
| 54 | + return activatable(); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + }; | ||
| 58 | + | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | +#endif // IPC3270_ACTION_H_INCLUDED |
client/src/include/lib3270/ipc/request.h
client/src/session/local/actions.cc
| @@ -38,11 +38,32 @@ | @@ -38,11 +38,32 @@ | ||
| 38 | 38 | ||
| 39 | #include "private.h" | 39 | #include "private.h" |
| 40 | #include <lib3270/actions.h> | 40 | #include <lib3270/actions.h> |
| 41 | + #include <lib3270/ipc/action.h> | ||
| 41 | 42 | ||
| 42 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 43 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
| 43 | 44 | ||
| 44 | namespace TN3270 { | 45 | namespace TN3270 { |
| 45 | 46 | ||
| 47 | + Local::Action::Action(Session *session, const LIB3270_ACTION *descriptor) { | ||
| 48 | + this->session = session; | ||
| 49 | + this->descriptor = descriptor; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + bool Local::Action::activatable() const noexcept { | ||
| 53 | + std::lock_guard<std::mutex> lock(this->session->sync); | ||
| 54 | + return lib3270_action_is_activatable(this->descriptor,this->session->hSession); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + void Local::Action::activate() { | ||
| 58 | + std::lock_guard<std::mutex> lock(this->session->sync); | ||
| 59 | + chkResponse(lib3270_action_activate(this->descriptor,this->session->hSession)); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + TN3270::Action * Local::Session::getAction(const LIB3270_ACTION *descriptor) { | ||
| 63 | + std::lock_guard<std::mutex> lock(sync); | ||
| 64 | + return new Local::Action(this, descriptor); | ||
| 65 | + } | ||
| 66 | + | ||
| 46 | void Local::Session::action(const char *action_name) { | 67 | void Local::Session::action(const char *action_name) { |
| 47 | std::lock_guard<std::mutex> lock(sync); | 68 | std::lock_guard<std::mutex> lock(sync); |
| 48 | chkResponse(lib3270_action_activate_by_name(action_name,hSession)); | 69 | chkResponse(lib3270_action_activate_by_name(action_name,hSession)); |
| @@ -74,7 +95,7 @@ | @@ -74,7 +95,7 @@ | ||
| 74 | 95 | ||
| 75 | } | 96 | } |
| 76 | 97 | ||
| 77 | - void Local::Session::push(const Action action) { | 98 | + void Local::Session::push(const KeyboardAction action) { |
| 78 | 99 | ||
| 79 | typedef int (*ActionCallback)(H3270 *); | 100 | typedef int (*ActionCallback)(H3270 *); |
| 80 | 101 |
client/src/session/local/private.h
| @@ -42,6 +42,7 @@ | @@ -42,6 +42,7 @@ | ||
| 42 | 42 | ||
| 43 | #include <config.h> | 43 | #include <config.h> |
| 44 | #include <ipc-client-internals.h> | 44 | #include <ipc-client-internals.h> |
| 45 | + #include <lib3270/ipc/action.h> | ||
| 45 | #include <string> | 46 | #include <string> |
| 46 | #include <lib3270.h> | 47 | #include <lib3270.h> |
| 47 | #include <stdexcept> | 48 | #include <stdexcept> |
| @@ -53,9 +54,25 @@ | @@ -53,9 +54,25 @@ | ||
| 53 | 54 | ||
| 54 | namespace Local { | 55 | namespace Local { |
| 55 | 56 | ||
| 57 | + class Session; | ||
| 58 | + | ||
| 59 | + class Action : public TN3270::Action { | ||
| 60 | + private: | ||
| 61 | + Session *session; | ||
| 62 | + const LIB3270_ACTION *descriptor; | ||
| 63 | + | ||
| 64 | + public: | ||
| 65 | + Action(Session *hSession, const LIB3270_ACTION *descriptor); | ||
| 66 | + bool activatable() const noexcept override; | ||
| 67 | + void activate() override; | ||
| 68 | + | ||
| 69 | + }; | ||
| 70 | + | ||
| 56 | class TN3270_PRIVATE Session : public TN3270::Abstract::Session { | 71 | class TN3270_PRIVATE Session : public TN3270::Abstract::Session { |
| 57 | private: | 72 | private: |
| 58 | 73 | ||
| 74 | + friend class Action; | ||
| 75 | + | ||
| 59 | /// @brief Handle of the related instance of lib3270 | 76 | /// @brief Handle of the related instance of lib3270 |
| 60 | H3270 * hSession; | 77 | H3270 * hSession; |
| 61 | 78 | ||
| @@ -89,12 +106,14 @@ | @@ -89,12 +106,14 @@ | ||
| 89 | virtual ~Session(); | 106 | virtual ~Session(); |
| 90 | 107 | ||
| 91 | // Actions | 108 | // Actions |
| 109 | + TN3270::Action * getAction(const LIB3270_ACTION *descriptor) override; | ||
| 110 | + | ||
| 92 | void action(const char *action_name) override; | 111 | void action(const char *action_name) override; |
| 93 | void connect(const char *url, int seconds) override; | 112 | void connect(const char *url, int seconds) override; |
| 94 | void disconnect() override; | 113 | void disconnect() override; |
| 95 | void pfkey(unsigned short value) override; | 114 | void pfkey(unsigned short value) override; |
| 96 | void pakey(unsigned short value) override; | 115 | void pakey(unsigned short value) override; |
| 97 | - void push(const Action action) override; | 116 | + void push(const KeyboardAction action) override; |
| 98 | void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) override; | 117 | void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) override; |
| 99 | 118 | ||
| 100 | void wait(time_t seconds) const override; | 119 | void wait(time_t seconds) const override; |
client/src/session/remote/actions.cc
client/src/session/remote/private.h
| @@ -95,7 +95,7 @@ | @@ -95,7 +95,7 @@ | ||
| 95 | void disconnect() override; | 95 | void disconnect() override; |
| 96 | void pfkey(unsigned short value) override; | 96 | void pfkey(unsigned short value) override; |
| 97 | void pakey(unsigned short value) override; | 97 | void pakey(unsigned short value) override; |
| 98 | - void push(const Action action) override; | 98 | + void push(const KeyboardAction action) override; |
| 99 | void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) override; | 99 | void print(LIB3270_CONTENT_OPTION option = LIB3270_CONTENT_ALL) override; |
| 100 | 100 | ||
| 101 | void wait(time_t seconds) const override; | 101 | void wait(time_t seconds) const override; |