001package edu.wpi.first.wpilibj.networktables2.client; 002 003import java.io.*; 004import java.util.*; 005 006import edu.wpi.first.wpilibj.networktables2.*; 007import edu.wpi.first.wpilibj.networktables2.connection.*; 008 009/** 010 * The entry store for a {@link NetworkTableClient} 011 * 012 * @author Mitchell 013 * 014 */ 015public class ClientNetworkTableEntryStore extends AbstractNetworkTableEntryStore{ 016 017 /** 018 * Create a new ClientNetworkTableEntryStore 019 * @param transactionPool 020 * @param listenerManager 021 */ 022 public ClientNetworkTableEntryStore(final TableListenerManager listenerManager) { 023 super(listenerManager); 024 } 025 026 027 protected boolean addEntry(NetworkTableEntry newEntry){ 028 synchronized(this){ 029 NetworkTableEntry entry = (NetworkTableEntry)namedEntries.get(newEntry.name); 030 031 if(entry!=null){ 032 if(entry.getId()!=newEntry.getId()){ 033 idEntries.remove(entry.getId()); 034 if(newEntry.getId()!=NetworkTableEntry.UNKNOWN_ID){ 035 entry.setId(newEntry.getId()); 036 idEntries.put(newEntry.getId(), entry); 037 } 038 } 039 040 entry.forcePut(newEntry.getSequenceNumber(), newEntry.getType(), newEntry.getValue()); 041 } 042 else{ 043 if(newEntry.getId()!=NetworkTableEntry.UNKNOWN_ID) 044 idEntries.put(newEntry.getId(), newEntry); 045 namedEntries.put(newEntry.name, newEntry); 046 } 047 } 048 return true; 049 } 050 051 protected boolean updateEntry(NetworkTableEntry entry, char sequenceNumber, Object value) { 052 synchronized(this){ 053 entry.forcePut(sequenceNumber, value); 054 if(entry.getId()==NetworkTableEntry.UNKNOWN_ID){ 055 return false; 056 } 057 return true; 058 } 059 } 060 061 /** 062 * Send all unknown entries in the entry store to the given connection 063 * @param connection 064 * @throws IOException 065 */ 066 void sendUnknownEntries(final NetworkTableConnection connection) throws IOException { 067 synchronized(this){ 068 Enumeration e = namedEntries.elements(); 069 while(e.hasMoreElements()){ 070 NetworkTableEntry entry = (NetworkTableEntry) e.nextElement(); 071 if(entry.getId()==NetworkTableEntry.UNKNOWN_ID) 072 connection.sendEntryAssignment(entry); 073 } 074 connection.flush(); 075 } 076 } 077}