View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.websocket.client.io;
20  
21  import org.eclipse.jetty.util.FuturePromise;
22  import org.eclipse.jetty.websocket.api.Session;
23  import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
24  import org.eclipse.jetty.websocket.client.ClientUpgradeResponse;
25  import org.eclipse.jetty.websocket.client.WebSocketClient;
26  import org.eclipse.jetty.websocket.client.masks.Masker;
27  import org.eclipse.jetty.websocket.common.WebSocketSession;
28  import org.eclipse.jetty.websocket.common.events.EventDriver;
29  
30  /**
31   * Holder for the pending connect information.
32   */
33  public abstract class ConnectPromise extends FuturePromise<Session> implements Runnable
34  {
35      private final WebSocketClient client;
36      private final EventDriver driver;
37      private final ClientUpgradeRequest request;
38      private final Masker masker;
39      private ClientUpgradeResponse response;
40  
41      public ConnectPromise(WebSocketClient client, EventDriver driver, ClientUpgradeRequest request)
42      {
43          this.client = client;
44          this.driver = driver;
45          this.request = request;
46          this.masker = client.getMasker();
47      }
48  
49      @Override
50      public void failed(Throwable cause)
51      {
52          // Notify websocket of failure to connect
53          driver.onError(cause);
54  
55          // Notify promise/future of failure to connect
56          super.failed(cause);
57      }
58  
59      public WebSocketClient getClient()
60      {
61          return client;
62      }
63  
64      public EventDriver getDriver()
65      {
66          return this.driver;
67      }
68  
69      public Masker getMasker()
70      {
71          return masker;
72      }
73  
74      public ClientUpgradeRequest getRequest()
75      {
76          return this.request;
77      }
78  
79      public ClientUpgradeResponse getResponse()
80      {
81          return response;
82      }
83  
84      public void setResponse(ClientUpgradeResponse response)
85      {
86          this.response = response;
87      }
88  
89      public void succeeded(WebSocketSession session)
90      {
91          session.setUpgradeRequest(request);
92          session.setUpgradeResponse(response);
93          session.open();
94          super.succeeded(session);
95      }
96  }