Commit Graph

16 Commits

Author SHA1 Message Date
Peter Johnson
f81b6fbcd6 Fix handling of deleted values in several places. (#241)
Now that the m_entries entry is kept, other places can't assume that
a value exists simply because the entry exists.
2017-10-02 13:06:39 -07:00
Peter Johnson
1f18cc5416 Add SaveEntries() and LoadEntries(). (#233)
These allow saving and loading non-persistent entries in the persistent
file format.
2017-10-01 09:13:43 -07:00
Peter Johnson
e68a71022c Move immediate connection notification logic into Dispatcher.
This prevents a race condition that could result in out of order
notifications.
2017-10-01 09:01:00 -07:00
Peter Johnson
e4a8bff70e Move immediate entry notification logic into Storage.
This prevents a race condition that could result in out of order
notifications.
2017-10-01 09:01:00 -07:00
Peter Johnson
10982e0275 Don't actually remove deleted entries from m_entries. (#239)
Doing so invalidates entry instance handles.

Fixes #238.
2017-09-30 22:55:30 -07:00
Peter Johnson
cedbafeb28 Add INetworkConnection interface for unit testing. 2017-09-06 20:59:09 -07:00
Peter Johnson
7c1d2f4bc4 Improve client connection synchronization behavior.
The original synchronization behavior was troublesome for two reasons:
- It had unpredictable behavior for updated values
- It brought back to life deleted values

Instead of relying on the server to inform the client regarding reconnections,
the client keeps track of what values have been modified by user code on the
client.  When the client connects to the server, the following occurs.

For entries that have been modified by user code on the client:
- If the entry is not persistent, the server value is overwritten with the
  client value
- If the entry does not exist on the server, the client sends an assignment
  to the server to recreate it on the server

For entries that have not been modified by user code on the client:
- The client value is overwritten with the server value
- If the entry does not exist on the server, the client deletes the entry

Fixes #8.
2017-09-06 20:48:48 -07:00
Peter Johnson
8099d6dbd7 Refactor Storage ProcessIncoming(). 2017-09-06 20:41:53 -07:00
Peter Johnson
8e01b68cf6 Switch Storage save/load to use raw_ostream/raw_istream. 2017-09-06 20:41:53 -07:00
Peter Johnson
d707a07f84 Refactor Storage load and save functionality.
Fixes #191.
2017-09-06 20:41:53 -07:00
Peter Johnson
5ab20bb27c Implement independent instances.
Previously, most of the classes were implemented as singletons so only one
instance was possible.

This change adds an instance handle-based API.  In Java, this API is located
in a different package than the old API (edu.wpi.first.networktables).

Backwards compatibility with ITable and the old NetworkTable API is largely
maintained, but a handful of classes have moved to the new package in Java
(ConnectionInfo and PersistentException), and the old JNI has been completed
replaced.

Also:
- Move SetTeam implementation to Dispatcher.
- Consistently pass time through Java and C++ Value API.
- Rename nt_Value.h to NetworkTableValue.h for consistency with Java.
- Improve documentation
- Make C++ and Java APIs more consistent
- Document RPC functions and support RPC in Java.
- Add polling features for entry and connection listeners and use them to
  move callback threads to Java level.
- Remove thread start and stop hooks (as polling is available).
- Make Notifiers, RpcServer, Dispatcher, and Storage mockable.
- Set NOTIFY_NEW on immediate entry notifications.
- Make GetTable("/") and GetTable("") equivalent.
- Generate local notification for flags update when loading persistent file.

And many unit test updates/changes:
- Use InitGoogleMock instead of InitGoogleTest in test main.
- Move test printers to TestPrinter.h/cpp.
- Provide printers for StringRef, EntryNotifier, and Handle.
- StorageTest: Check notifications.
- Add entry notifier unit tests.
- Storage: Add test for incoming entry assignment.
- Update connection listener tests.
- Add entry listener unit tests.

Fixes #11, #140, #189, #190, #192, #193, #221
2017-09-06 20:28:35 -07:00
Peter Johnson
12b2efa489 Log.cpp: Use raw_ostream and llvm path functions. (#223) 2017-08-27 12:01:31 -07:00
Peter Johnson
9e4dc235d7 Connect to server in parallel rather than doing round-robin. (#205)
This substantially speeds up client connection times.
2017-08-13 12:05:29 -07:00
Peter Johnson
d910b0b2a2 Remove deprecated throwing get functions. (#213) 2017-08-04 14:02:28 -05:00
Peter Johnson
8209ba8a00 Move NetworkTable into nt namespace, with a shim. (#211)
Defining NAMESPACED_NT will disable the shim.
2017-08-04 10:32:33 -05:00
Thad House
5df7463663 Remove wpiutil and update to the new build system (#210) 2017-08-03 16:14:40 -05:00