public void onOpen(Connection connection) { this.connection = connection; this.connection.setMaxIdleTime((int)getGravity().getGravityConfig().getChannelIdleTimeoutMillis()); setMaxBinaryMessageBufferSize(connection.getMaxBinaryMessageSize()); connect(); gravity.notifyConnected(this); }
public final boolean queue(GravityInternal gravity) { if (queued.getAndSet(true)) return false; gravity.execute(this); return true; }
public static GravityInternal initializeRequest(ServletConfig config, GravityInternal gravity, HttpServletRequest request, HttpServletResponse response) { HttpGraniteContext.createThreadIntance( gravity.getGraniteConfig(), gravity.getServicesConfig(), config.getServletContext(), request, response ); return gravity; }
HttpSession session = request.getSession("true".equals(servletContext.getInitParameter("org.granite.gravity.websocket.forceCreateSession"))); if (session != null) { ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, session, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, sessionId, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, (String)null, clientType); if (gravity.getGraniteConfig().getSecurityService() != null) gravity.getGraniteConfig().getSecurityService().prelogin(session, request, servletName); pingMessage.setClientId(clientId); Message ackMessage = gravity.handleMessage(channelFactory, pingMessage); if (sessionId != null) ackMessage.setHeader("JSESSIONID", sessionId); GlassFishWebSocketChannel channel = gravity.getChannel(channelFactory, (String)ackMessage.getClientId()); channel.setSession(session);
Message amf3Response = gravity.handleMessage(channelFactory, amf3Request); String channelId = (String)amf3Request.getClientId(); accessed = gravity.access(channelId); throw new IllegalArgumentException("Only one request is allowed on tunnel."); JBossWebChannel channel = gravity.getChannel(channelFactory, channelId); if (channel == null) throw new NullPointerException("No channel on tunnel connect");
Message amf3Response = gravity.handleMessage(channelFactory, amf3Request); String channelId = (String)amf3Request.getClientId(); accessed = gravity.access(channelId); throw new IllegalArgumentException("Only one request is allowed on tunnel."); GAEChannel channel = gravity.getChannel(channelFactory, channelId); if (channel == null) throw new NullPointerException("No channel on connect"); long pollingInterval = gravity.getGravityConfig().getExtra().get("gae/@polling-interval", Long.TYPE, GAE_POLLING_INTERVAL);
if (asyncHttpContext != null && gravity.hasUdpReceiverFactory()) { UdpReceiverFactory factory = gravity.getUdpReceiverFactory(); gravity.getGraniteConfig(), gravity.getServicesConfig(), null, request, response ); log.warn(e, "Could not send messages to channel: %s (retrying later)", getId()); GravityConfig gravityConfig = getGravity().getGravityConfig(); if (gravityConfig.isRetryOnError()) { receivedQueueLock.lock();
gravity.getGraniteConfig(), gravity.getServicesConfig(), sessionId, new HashMap<String, Object>(), clientType ); log.warn(e, "Could not send messages to channel: %s (retrying later)", this); GravityConfig gravityConfig = getGravity().getGravityConfig(); if (gravityConfig.isRetryOnError()) { receivedQueueLock.lock();
Message response = getGravity().handleMessage(getFactory(), message); String clientId = (String)message.getClientId(); accessed = getGravity().access(clientId);
public GravityConfig getGravityConfig() { return gravity.getGravityConfig(); }
@Override protected void doTimeout(RequestResponseKey key) throws IOException, ServletException { GravityInternal gravity = (GravityInternal)GravityManager.getGravity(getServletContext()); WebLogicChannelFactory channelFactory = new WebLogicChannelFactory(gravity); CommandMessage amf3Request = GravityServletUtil.getConnectMessage(key.getRequest()); String channelId = (String)amf3Request.getClientId(); WebLogicChannel channel = gravity.getChannel(channelFactory, channelId); channel.setRequestResponseKey(null); } }
public static ObjectOutput newSerializer(GravityInternal gravity, OutputStream os, ContentType contentType) { if (contentType == ContentType.JMF_AMF) return new JMFSerializer(os, gravity.getGraniteConfig().getSharedContext()); return gravity.getGraniteConfig().newAMF3Serializer(os); }
HttpSession session = request.getSession("true".equals(servletContext.getInitParameter("org.granite.gravity.websocket.forceCreateSession"))); if (session != null) { ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, session, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, sessionId, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), this.servletContext, (String)null, clientType); if (gravity.getGraniteConfig().getSecurityService() != null) gravity.getGraniteConfig().getSecurityService().prelogin(session, request, null); pingMessage.setClientId(clientId); Message ackMessage = gravity.handleMessage(channelFactory, pingMessage); if (sessionId != null) ackMessage.setHeader("JSESSIONID", sessionId); JettyWebSocketChannel channel = gravity.getChannel(channelFactory, (String)ackMessage.getClientId()); channel.setSession(session);
Message amf3Response = gravity.handleMessage(channelFactory, amf3Request); String channelId = (String)amf3Request.getClientId(); accessed = gravity.access(channelId); throw new IllegalArgumentException("Only one connect request is allowed on tunnel."); TomcatChannel channel = gravity.getChannel(channelFactory, channelId); if (channel == null) throw new NullPointerException("No channel on tunnel connect");
@Override public void receive(AsyncMessage message) throws MessageReceivingException { if (message == null) throw new NullPointerException("message cannot be null"); GravityConfig gravityConfig = gravity.getGravityConfig(); receivedQueueLock.lock(); try { if (receivedQueue.size() + 1 > gravityConfig.getMaxMessagesQueuedPerChannel()) throw new MessageReceivingException(message, "Could not queue message (channel's queue is full) for channel: " + this); receivedQueue.add(message); } finally { receivedQueueLock.unlock(); } synchronized (this) { resume(); } }
protected GravityInternal initializeRequest() { if (session != null) ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), session.getServletContext(), session, clientType); else SimpleGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), sessionId, new HashMap<String, Object>(), clientType); return gravity; }
@Override public boolean handleError(CometEvent event) throws IOException { if (EventUtil.isErrorButNotTimeout(event)) log.warn("Got an error event: %s", EventUtil.toString(event)); try { HttpServletRequest request = event.getHttpServletRequest(); Message connect = getConnectMessage(request); if (connect != null) { // This should be a timeout. GravityInternal gravity = (GravityInternal)GravityManager.getGravity(getServletContext()); TomcatChannelFactory channelFactory = new TomcatChannelFactory(gravity); String channelId = (String)connect.getClientId(); TomcatChannel channel = gravity.getChannel(channelFactory, channelId); // Cancel channel's execution (timeout or other errors). if (channel != null) channel.setCometEvent(null); } } catch (Exception e) { log.error(e, "Error while processing event: %s", EventUtil.toString(event)); } return true; // Close http event. } }
public static Message[] deserialize(GravityInternal gravity, HttpServletRequest request, InputStream is) throws ClassNotFoundException, IOException { if (ContentType.JMF_AMF.mimeType().equals(request.getContentType())) { @SuppressWarnings("resource") JMFDeserializer deserializer = new JMFDeserializer(is, gravity.getGraniteConfig().getSharedContext()); return (Message[])deserializer.readObject(); } ObjectInput amf3Deserializer = gravity.getGraniteConfig().newAMF3Deserializer(is); Object[] objects = (Object[])amf3Deserializer.readObject(); Message[] messages = new Message[objects.length]; System.arraycopy(objects, 0, messages, 0, objects.length); return messages; }
HttpSession session = request.getSession(false); if (session != null) { ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), getServletContext(), session, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), getServletContext(), sessionId, clientType); ServletGraniteContext.createThreadInstance(gravity.getGraniteConfig(), gravity.getServicesConfig(), getServletContext(), (String)null, clientType); pingMessage.setClientId(clientId); Message ackMessage = gravity.handleMessage(channelFactory, pingMessage); if (sessionId != null) ackMessage.setHeader("JSESSIONID", sessionId); TomcatWebSocketChannel channel = gravity.getChannel(channelFactory, (String)ackMessage.getClientId()); channel.setSession(session); if (gravity.getGraniteConfig().getSecurityService() != null) { try { gravity.getGraniteConfig().getSecurityService().prelogin(session, request instanceof WsHttpServletRequestWrapper ? requestField.get(request) : request, getServletConfig().getServletName());