// Path: siden-core/src/main/java/ninja/siden/util/ExceptionalConsumer.java
// @FunctionalInterface
// public interface ExceptionalConsumer<T, EX extends Exception> {
// 
// 	void accept(T t) throws EX;
// }


import io.undertow.websockets.core.WebSocketChannel;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import ninja.siden.util.ExceptionalConsumer;
/*
 * Copyright 2014 SATO taichi
 *
 * 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 ninja.siden;




/**
 * @author taichi
 * @see io.undertow.websockets.core.WebSocketChannel
 */
public interface Connection extends AttributeContainer {

	// endpoint methods

	CompletableFuture<Void> send(String text);

	CompletableFuture<Void> send(ByteBuffer payload);

	CompletableFuture<Void> ping(ByteBuffer payload);

	CompletableFuture<Void> pong(ByteBuffer payload);

	CompletableFuture<Void> close();

	CompletableFuture<Void> close(int code, String reason);

	void sendStream(ExceptionalConsumer<OutputStream, Exception> fn);

// Path: siden-core/src/main/java/ninja/siden/util/ExceptionalConsumer.java
// @FunctionalInterface
// public interface ExceptionalConsumer<T, EX extends Exception> {
// 
// 	void accept(T t) throws EX;
// }


// Path: siden-core/src/main/java/ninja/siden/Connection.java
import io.undertow.websockets.core.WebSocketChannel;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import ninja.siden.util.ExceptionalConsumer;

/*
 * Copyright 2014 SATO taichi
 *
 * 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 ninja.siden;




/**
 * @author taichi
 * @see io.undertow.websockets.core.WebSocketChannel
 */
public interface Connection extends AttributeContainer {

	// endpoint methods

	CompletableFuture<Void> send(String text);

	CompletableFuture<Void> send(ByteBuffer payload);

	CompletableFuture<Void> ping(ByteBuffer payload);

	CompletableFuture<Void> pong(ByteBuffer payload);

	CompletableFuture<Void> close();

	CompletableFuture<Void> close(int code, String reason);

	void sendStream(ExceptionalConsumer<OutputStream, Exception> fn);

	void sendWriter(ExceptionalConsumer<Writer, Exception> fn);