001package edu.wpi.first.wpilibj.networktables2.client;
002
003import edu.wpi.first.wpilibj.networktables2.*;
004import edu.wpi.first.wpilibj.networktables2.stream.*;
005import edu.wpi.first.wpilibj.networktables2.thread.*;
006import edu.wpi.first.wpilibj.networktables2.type.*;
007
008/**
009 * A client node in NetworkTables 2.0
010 * 
011 * @author Mitchell
012 *
013 */
014public class NetworkTableClient extends NetworkTableNode{
015        private final ClientConnectionAdapter adapter;
016        private final WriteManager writeManager;
017
018        /**
019         * Create a new NetworkTable Client
020         * @param streamFactory
021         * @param threadManager
022         * @param transactionPool
023         */
024        public NetworkTableClient(final IOStreamFactory streamFactory, final NetworkTableEntryTypeManager typeManager, final NTThreadManager threadManager){
025                ClientNetworkTableEntryStore entryStore;
026                init(entryStore = new ClientNetworkTableEntryStore(this));
027                adapter = new ClientConnectionAdapter(entryStore, threadManager, streamFactory, this, typeManager);
028                writeManager = new WriteManager(adapter, threadManager, getEntryStore(), 1000);
029                
030                getEntryStore().setOutgoingReceiver(new TransactionDirtier(writeManager));
031                getEntryStore().setIncomingReceiver(OutgoingEntryReceiver.NULL);
032                writeManager.start();
033        }
034        /**
035         * Create a new NetworkTable Client
036         * @param streamFactory
037         */
038        public NetworkTableClient(final IOStreamFactory streamFactory){
039                this(streamFactory, new NetworkTableEntryTypeManager(), new DefaultThreadManager());
040        }
041
042        /**
043         * force the client to disconnect and reconnect to the server again. Will connect if the client is currently disconnected
044         */
045        public void reconnect() {
046                adapter.reconnect();
047        }
048
049        public void close() {
050                adapter.close();
051        }
052        
053        public void stop() {
054                writeManager.stop();
055                close();
056        }
057
058        public boolean isConnected() {
059                return adapter.isConnected();
060        }
061
062        public boolean isServer() {
063                return false;
064        }
065
066}