001package edu.wpi.first.wpilibj.networktables2.server; 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 NetworkTableServer} 011 * 012 * @author Mitchell 013 * 014 */ 015public class ServerNetworkTableEntryStore extends AbstractNetworkTableEntryStore{ 016 017 /** 018 * Create a new Server entry store 019 * @param transactionPool the transaction pool 020 * @param listenerManager the listener manager that fires events from this entry store 021 */ 022 public ServerNetworkTableEntryStore(final TableListenerManager listenerManager) { 023 super(listenerManager); 024 } 025 026 private char nextId = (char)0; 027 protected boolean addEntry(NetworkTableEntry newEntry){ 028 synchronized(this){ 029 NetworkTableEntry entry = (NetworkTableEntry)namedEntries.get(newEntry.name); 030 031 if(entry==null){ 032 newEntry.setId(nextId++); 033 idEntries.put(newEntry.getId(), newEntry); 034 namedEntries.put(newEntry.name, newEntry); 035 return true; 036 } 037 return false; 038 } 039 } 040 041 protected boolean updateEntry(NetworkTableEntry entry, char sequenceNumber, Object value){ 042 synchronized(this){ 043 if(entry.putValue(sequenceNumber, value)) 044 return true; 045 return false; 046 } 047 } 048 049 /** 050 * Send all entries in the entry store as entry assignments in a single transaction 051 * @param connection 052 * @throws IOException 053 */ 054 void sendServerHello(final NetworkTableConnection connection) throws IOException { 055 synchronized(this){ 056 Enumeration e = namedEntries.elements(); 057 while(e.hasMoreElements()){ 058 NetworkTableEntry entry = (NetworkTableEntry) e.nextElement(); 059 connection.sendEntryAssignment(entry); 060 } 061 connection.sendServerHelloComplete(); 062 connection.flush(); 063 } 064 } 065}