1 /* 2 * Copyright 2022 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package io.netty5.handler.codec.http.websocketx; 17 18 import io.netty5.handler.codec.ProtocolEvent; 19 20 import static java.util.Objects.requireNonNull; 21 22 /** 23 * {@link ProtocolEvent} that indicate the completion of a websocket handshake. 24 */ 25 public abstract class WebSocketHandshakeCompletionEvent implements ProtocolEvent { 26 27 private final WebSocketVersion version; 28 private final Throwable cause; 29 30 /** 31 * Create a new event that indicate a successful websocket handshake. 32 * 33 * @param version the {@link WebSocketVersion} that was used. 34 */ 35 WebSocketHandshakeCompletionEvent(WebSocketVersion version) { 36 this.version = requireNonNull(version, "version"); 37 this.cause = null; 38 } 39 40 /** 41 * Create a new event that indicate a failed websocket handshake. 42 * 43 * @param cause the cause of the failure 44 */ 45 WebSocketHandshakeCompletionEvent(Throwable cause) { 46 this.cause = requireNonNull(cause, "cause"); 47 version = null; 48 } 49 50 @Override 51 public final Throwable cause() { 52 return cause; 53 } 54 55 /** 56 * Return the {@link WebSocketVersion} of the handshake or {@code null} in case of a failure. 57 * 58 * @return the version. 59 */ 60 public final WebSocketVersion version() { 61 return version; 62 } 63 64 @Override 65 public String toString() { 66 final Throwable cause = cause(); 67 return cause == null? getClass().getSimpleName() + "(SUCCESS)" : 68 getClass().getSimpleName() + '(' + cause + ')'; 69 } 70 }