WebSocketSocket/client/src/main/java/com/moparisthebest/websocket/WebSocketSocket.java

81 lines
2.7 KiB
Java

/*
* WebSocketSocket implements a custom java.net.Socket over top of a
* WebSocket, and also a server component that accepts a WebSocket
* connection and connects to a host/port.
* Copyright (C) 2016 Travis Burtrum (moparisthebest)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package com.moparisthebest.websocket;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
/**
* Created by mopar on 8/30/16.
*/
public class WebSocketSocket extends Socket {
protected WebSocketSocketImpl impl;
protected WebSocketAddress addr;
private WebSocketSocket(final WebSocketSocketImpl impl) throws SocketException {
super(impl);
this.impl = impl;
}
public WebSocketSocket() throws SocketException {
this(new WebSocketSocketImpl());
}
public WebSocketSocket(final WebSocketAddress addr) throws IOException {
this();
this.connect(addr);
}
public WebSocketSocket(final String url) throws IOException {
this(new WebSocketAddress(url));
}
/**
* Binds this {@link WebSocketSocket} to the given bindpoint. Only bindpoints of the type
* {@link WebSocketAddress} are supported.
*/
@Override
public void bind(final SocketAddress bindpoint) throws WebSocketSocketException {
throw new WebSocketSocketException("bind not supported");
}
@Override
public void connect(final SocketAddress endpoint, final int timeout) throws IOException {
if (!(endpoint instanceof WebSocketAddress)) {
throw new WebSocketSocketException("Can only connect to endpoints of type "
+ WebSocketAddress.class.getName());
}
super.connect(endpoint, timeout);
this.addr = (WebSocketAddress) endpoint;
}
@Override
public String toString() {
if (isConnected()) {
return "WebSocketSocket[url=" + addr.getUrl() + "]";
}
return "WebSocketSocket[unconnected]";
}
}