Commit Graph

40 Commits

Author SHA1 Message Date
Peter Johnson
8d7cdeabbf Implement remote procedure calls. 2015-08-13 21:32:16 -07:00
Peter Johnson
4146db6fc8 Visual Studio 2013 compilation fixes.
- Missing header file callouts in some cases (library deltas)
- Lack of support for auto parameters in lambdas
- Defining of ERROR by windows.h
- Dispatcher::Connection needs a move constructor (default not generated)
- Need explicit enable_if on std::string move template in Value to avoid trying to move const char[] (string literal)
- Compile flags
2015-08-03 01:27:02 -07:00
Peter Johnson
53a0531def Storage::ProcessIncoming(): Don't override parameter with local. 2015-08-02 23:20:42 -07:00
Peter Johnson
5b65bfb64d Storage: Fix comparison for client update-on-assign. 2015-08-02 22:18:46 -07:00
Peter Johnson
e9073a3cc0 Implement notifiers.
The notifier thread is lazily started when the first notifier is added.
This avoids the extra thread/processing overhead when notifiers are not used.
2015-08-02 21:47:01 -07:00
Peter Johnson
67de7af7b2 Storage: Use unique_ptr instead of shared_ptr for Entry. 2015-08-01 11:47:35 -07:00
Peter Johnson
11508b77d1 Ensure initial synchronization is atomic. 2015-07-31 23:56:06 -07:00
Peter Johnson
4356e313ec Add logging framework.
DEBUG messages are completely optimized out if NDEBUG is defined.
2015-07-31 22:41:26 -07:00
Peter Johnson
ead125555c Implement client/server handshaking. 2015-07-31 20:32:52 -07:00
Peter Johnson
978cdadda0 Storage::GetEntryType(): Check for null entry. 2015-07-31 14:16:13 -07:00
Peter Johnson
cde7782c21 Make StorageEntry a struct and move into Storage class. 2015-07-31 13:48:33 -07:00
Peter Johnson
138ebf5b4d Storage: generate messages rather than intermediate updates. 2015-07-31 13:21:19 -07:00
Peter Johnson
a127bca0e4 Push down null check for m_queue_outgoing. 2015-07-30 00:06:50 -07:00
Peter Johnson
83be99e78c Immediately process incoming messages.
This required moving message processing into the Storage class.
2015-07-29 23:45:04 -07:00
Peter Johnson
f6576b18f7 Storage: Add more Dispatcher accessors. 2015-07-29 20:33:13 -07:00
Peter Johnson
5823e3c780 Storage: Add CreateEntry function for Dispatcher use. 2015-07-28 22:06:42 -07:00
Peter Johnson
a0d30ffef1 Storage: Use StringMap instead of ConcurrentQueue for updates.
Updates are merged or themselves updated as user code changes.  This avoids
the need for the dispatcher to do this and also avoids the need for disabling
updates when the dispatcher isn't running, because there's no risk of memory
usage piling up.
2015-07-26 20:41:48 -07:00
Peter Johnson
fb1b82e239 StorageEntry: Also store copy of name here.
This wastes a bit of space but is necessary for assign message generation.
2015-07-26 10:28:20 -07:00
Peter Johnson
18659257d3 Storage: Make setters globally atomic.
Previously, setters were locally but not globally atomic because they
used GetEntry() (globally atomic) in conjunction with locally atomic
gets/sets to the StorageEntry.  To support synchronizing network handshakes
they need to be globally atomic.

GetEntry() has been removed due to this issue, so a helper was added to
StorageTest instead.
2015-07-26 09:27:23 -07:00
Peter Johnson
b4c65dc210 Make global instance init thread-safe.
Use local statics except for Visual C++ < 2015.
2015-07-20 23:36:22 -07:00
Peter Johnson
5df62ac172 Storage: Disable use of update queue by default.
This ensures we don't "leak" memory for local use when the dispatch thread
is not running.
2015-07-20 22:24:47 -07:00
Peter Johnson
a3fcce891f LoadPersistent: Fix various bugs. 2015-07-19 22:44:34 -07:00
Peter Johnson
8db016c223 SavePersistent: Sort in name order, fix list commas. 2015-07-19 21:10:20 -07:00
Peter Johnson
e4731a4e4e Storage::GetEntryInfo: Actually filter on types. 2015-07-19 19:42:13 -07:00
Peter Johnson
d6afbc56c4 Storage: Delete functions now delete from map.
This is ok due to the map storing shared_ptr.
2015-07-19 18:10:26 -07:00
Peter Johnson
ffb54872c0 Storage::SetEntryFlags(): Fix deadlock, check for empty name. 2015-07-19 17:50:31 -07:00
Peter Johnson
ead6b4960f Storage: Use make_shared instead of reset. 2015-07-19 16:46:59 -07:00
Peter Johnson
0a18d2e57b Storage: Make individual entries thread safe.
Also use shared_ptr to refer to entries rather than names.
2015-07-19 16:02:21 -07:00
Peter Johnson
2437f06c7f Implement majority of Storage functionality.
It's also now thread-safe.
2015-07-18 01:29:51 -07:00
Peter Johnson
d05656b716 StorageEntry: Make data public, remove accessors.
Also add id and seq_num fields.
2015-07-17 23:41:25 -07:00
Peter Johnson
fcbd2751ba Provide C++ API. Move all classes to "nt" namespace.
The C API is now just simple wrappers around the C++ API.
2015-07-17 07:21:07 -07:00
Peter Johnson
9906116d23 Don't base Value on NT_Value.
Also use std::string instead of NT_String.

Conversions to/from the internal structures will be done at the interface.
2015-07-16 01:38:27 -07:00
Peter Johnson
4d3fb3c497 Storage: Use unique_ptr for instance. 2015-07-14 23:15:08 -07:00
Peter Johnson
b66fb68f29 Finish LoadPersistent().
Change-Id: I5c4c439dc3d2585f2edae74f78c14f826b091186
2015-07-11 09:33:33 -07:00
Peter Johnson
cb30bb5d70 Rename base64 to Base64.
Change-Id: I0dea9f77ca898ab1a278a0b0163418f96f823725
2015-07-11 09:33:33 -07:00
Peter Johnson
40ebb9a844 C++-ify base64 functions.
Change-Id: I5cf7a8971b18b7a2700fe8d616733e32fa1e3282
2015-07-11 09:33:33 -07:00
Peter Johnson
b7a87bb6f9 Make StringValue noncopyable.
Change-Id: I5b02cf988aaa15c467fa62c96c951d2891bc43db
2015-07-11 09:33:33 -07:00
Peter Johnson
f6deafee22 Add type-safe wrapper around NT_Value and NT_String.
Change-Id: Ib7ef5a6de9c8c7a1f5f6432083d1fb38328438dc
2015-07-11 09:33:33 -07:00
Peter Johnson
8d6a0786c8 Move all C api functions to ntcore.cpp.
Change-Id: I17b4f5fec30ecd684cf04af2bbd6b7346bfcd683
2015-07-11 09:33:33 -07:00
Peter Johnson
d7ca3343bc File renames.
Change-Id: I3fa88f94593941a25f65eaabfcbbca2428613e6c
2015-07-11 09:33:33 -07:00