source: filezilla/trunk/fuentes/src/interface/commandqueue.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 1.6 KB
Line 
1#ifndef __COMMANDQUEUE_H__
2#define __COMMANDQUEUE_H__
3
4class CFileZillaEngine;
5class CNotification;
6class CState;
7class CMainFrame;
8
9DECLARE_EVENT_TYPE(fzEVT_GRANTEXCLUSIVEENGINEACCESS, -1)
10
11class CCommandQueue
12{
13public:
14        enum command_origin
15        {
16                any = -1,
17                normal, // Most user actions
18                recursiveOperation
19        };
20
21        CCommandQueue(CFileZillaEngine *pEngine, CMainFrame* pMainFrame, CState* pState);
22        ~CCommandQueue();
23
24        void ProcessCommand(CCommand *pCommand, command_origin origin = normal);
25        void ProcessNextCommand();
26        bool Idle(command_origin origin = any) const;
27        bool Cancel();
28        bool Quit();
29        void Finish(std::unique_ptr<COperationNotification> && pNotification);
30
31        void RequestExclusiveEngine(bool requestExclusive);
32
33        CFileZillaEngine* GetEngineExclusive(int requestId);
34        void ReleaseEngine();
35        bool EngineLocked() const { return m_exclusiveEngineLock; }
36
37        void ProcessDirectoryListing(CDirectoryListingNotification const& listingNotification);
38
39protected:
40        void ProcessReply(int nReplyCode, Command commandId);
41
42        void GrantExclusiveEngineRequest();
43
44        CFileZillaEngine *m_pEngine;
45        CMainFrame* m_pMainFrame;
46        CState* m_pState;
47        bool m_exclusiveEngineRequest;
48        bool m_exclusiveEngineLock;
49        int m_requestId;
50        static int m_requestIdCounter;
51
52        // Used to make this class reentrance-safe
53        int m_inside_commandqueue{};
54
55        struct CommandInfo {
56                CommandInfo() = default;
57                CommandInfo(command_origin o, std::unique_ptr<CCommand> && c)
58                        : origin(o)
59                        , command(std::move(c))
60                {}
61
62                command_origin origin;
63                std::unique_ptr<CCommand> command;
64                bool didReconnect{};
65        };
66        std::deque<CommandInfo> m_CommandList;
67
68        bool m_quit{};
69};
70
71#endif //__COMMANDQUEUE_H__
72
Note: See TracBrowser for help on using the repository browser.