/* * Copyright 2008-2009 LinkedIn, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package voldemort.client.protocol.admin; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import voldemort.client.protocol.RequestFormatType; /** * A wrapper class that wraps a socket with its DataInputStream and * DataOutputStream * * */ public class SocketAndStreams { private static final int DEFAULT_BUFFER_SIZE = 1000; private final Socket socket; private final RequestFormatType requestFormatType; private final DataInputStream inputStream; private final DataOutputStream outputStream; private final long createTimestamp; public SocketAndStreams(Socket socket, RequestFormatType requestFormatType) throws IOException { this(socket, DEFAULT_BUFFER_SIZE, requestFormatType); } public SocketAndStreams(Socket socket, int bufferSizeBytes, RequestFormatType type) throws IOException { this.socket = socket; this.inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream(), bufferSizeBytes)); this.outputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), bufferSizeBytes)); this.requestFormatType = type; this.createTimestamp = System.nanoTime(); } public Socket getSocket() { return socket; } public DataInputStream getInputStream() { return inputStream; } public DataOutputStream getOutputStream() { return outputStream; } public RequestFormatType getRequestFormatType() { return this.requestFormatType; } /** * Returns the nanosecond-based timestamp of when this socket was created. * * @return Nanosecond-based timestamp of socket creation * * @see SocketResourceFactory#validate(SocketDestination, SocketAndStreams) */ public long getCreateTimestamp() { return createTimestamp; } }