OLD | NEW |
1 #ifndef COMMUNICATION_H | 1 #ifndef COMMUNICATION_H |
2 #define COMMUNICATION_H | 2 #define COMMUNICATION_H |
3 | 3 |
4 #include <memory> | 4 #include <memory> |
5 #include <sstream> | 5 #include <sstream> |
6 #include <stdexcept> | 6 #include <stdexcept> |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 #include <Windows.h> | 10 #include <Windows.h> |
11 | 11 |
12 namespace Communication | 12 namespace Communication |
13 { | 13 { |
14 extern const std::wstring pipeName; | 14 extern const std::wstring pipeName; |
15 const int bufferSize = 1024; | |
16 | 15 |
17 enum ProcType : uint32_t { | 16 enum ProcType : uint32_t { |
18 PROC_MATCHES, | 17 PROC_MATCHES, |
19 PROC_GET_ELEMHIDE_SELECTORS, | 18 PROC_GET_ELEMHIDE_SELECTORS, |
20 PROC_AVAILABLE_SUBSCRIPTIONS, | 19 PROC_AVAILABLE_SUBSCRIPTIONS, |
21 PROC_LISTED_SUBSCRIPTIONS, | 20 PROC_LISTED_SUBSCRIPTIONS, |
22 PROC_SET_SUBSCRIPTION, | 21 PROC_SET_SUBSCRIPTION, |
23 PROC_UPDATE_ALL_SUBSCRIPTIONS, | 22 PROC_UPDATE_ALL_SUBSCRIPTIONS, |
24 PROC_GET_EXCEPTION_DOMAINS, | 23 PROC_GET_EXCEPTION_DOMAINS, |
25 PROC_ADD_FILTER, | 24 PROC_ADD_FILTER, |
(...skipping 11 matching lines...) Expand all Loading... |
37 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_
STRING); } | 36 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_
STRING); } |
38 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE
_WSTRING); } | 37 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE
_WSTRING); } |
39 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } | 38 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } |
40 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } | 39 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } |
41 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } | 40 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } |
42 private: | 41 private: |
43 std::istringstream buffer; | 42 std::istringstream buffer; |
44 ValueType currentType; | 43 ValueType currentType; |
45 bool hasType; | 44 bool hasType; |
46 | 45 |
47 void CheckType(ValueType expectedType) | 46 void CheckType(ValueType expectedType); |
48 { | |
49 if (!hasType) | |
50 ReadBinary(currentType); | |
51 | |
52 if (currentType != expectedType) | |
53 { | |
54 // Make sure we don't attempt to read the type again | |
55 hasType = true; | |
56 throw new std::runtime_error("Unexpected type found in input buffer"); | |
57 } | |
58 else | |
59 hasType = false; | |
60 } | |
61 | 47 |
62 template<class T> | 48 template<class T> |
63 InputBuffer& ReadString(T& value, ValueType expectedType) | 49 InputBuffer& ReadString(T& value, ValueType expectedType) |
64 { | 50 { |
65 CheckType(expectedType); | 51 CheckType(expectedType); |
66 | 52 |
67 SizeType length; | 53 SizeType length; |
68 ReadBinary(length); | 54 ReadBinary(length); |
69 | 55 |
70 std::auto_ptr<T::value_type> data(new T::value_type[length]); | 56 std::auto_ptr<T::value_type> data(new T::value_type[length]); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 151 |
166 InputBuffer ReadMessage(); | 152 InputBuffer ReadMessage(); |
167 void WriteMessage(OutputBuffer& message); | 153 void WriteMessage(OutputBuffer& message); |
168 | 154 |
169 protected: | 155 protected: |
170 HANDLE pipe; | 156 HANDLE pipe; |
171 }; | 157 }; |
172 } | 158 } |
173 | 159 |
174 #endif | 160 #endif |
OLD | NEW |