当前位置: 首页>>代码示例>>Java>>正文


Java SendHandler.onResult方法代码示例

本文整理汇总了Java中javax.websocket.SendHandler.onResult方法的典型用法代码示例。如果您正苦于以下问题:Java SendHandler.onResult方法的具体用法?Java SendHandler.onResult怎么用?Java SendHandler.onResult使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在javax.websocket.SendHandler的用法示例。


在下文中一共展示了SendHandler.onResult方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: sendMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
/** 
     * sendMessage is executed snychronously to avoid tomcat nativelib crashes.  
     * @param session
     * @param message
     * @param handler 
     */
    public synchronized static void sendMessage(final Session session, final String message, final SendHandler handler) {
//        synchronized (session) {
            try {
                session.getBasicRemote().sendText(message);
                handler.onResult(new SendResult());
            } catch (IOException ex) {
                Logger.getLogger(WebSocket.class.getName()).log(Level.SEVERE, null, ex);
                handler.onResult(new SendResult(ex));
                try {
                    //close broken session
                    session.close();
                } catch (IOException ex1) {
                    Logger.getLogger(WebSocket.class.getName()).log(Level.SEVERE, null, ex1);
                }
            }
//        }
//        }
    }
 
开发者ID:KAOREND,项目名称:reactive-hamster,代码行数:25,代码来源:WebSocket.java

示例2: endMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void endMessage(SendHandler handler, SendResult result) {
    boolean doWrite = false;
    MessagePart mpNext = null;
    synchronized (messagePartLock) {

        fragmented = nextFragmented;
        text = nextText;

        mpNext = messagePartQueue.poll();
        if (mpNext == null) {
            messagePartInProgress = false;
        } else if (!closed){
            // Session may have been closed unexpectedly in the middle of
            // sending a fragmented message closing the endpoint. If this
            // happens, clearly there is no point trying to send the rest of
            // the message.
            doWrite = true;
        }
    }
    if (doWrite) {
        // Actual write has to be outside sync block to avoid possible
        // deadlock between messagePartLock and writeLock in
        // o.a.coyote.http11.upgrade.AbstractServletOutputStream
        writeMessagePart(mpNext);
    }

    wsSession.updateLastActive();

    // Some handlers, such as the IntermediateMessageHandler, do not have a
    // nested handler so handler may be null.
    if (handler != null) {
        handler.onResult(result);
    }
}
 
开发者ID:liaokailin,项目名称:tomcat7,代码行数:35,代码来源:WsRemoteEndpointImplBase.java

示例3: clearHandler

import javax.websocket.SendHandler; //导入方法依赖的package包/类
/**
 *
 * @param t             The throwable associated with any error that
 *                      occurred
 * @param useDispatch   Should {@link SendHandler#onResult(SendResult)} be
 *                      called from a new thread, keeping in mind the
 *                      requirements of
 *                      {@link javax.websocket.RemoteEndpoint.Async}
 */
private void clearHandler(Throwable t, boolean useDispatch) {
    // Setting the result marks this (partial) message as
    // complete which means the next one may be sent which
    // could update the value of the handler. Therefore, keep a
    // local copy before signalling the end of the (partial)
    // message.
    SendHandler sh = handler;
    handler = null;
    buffers = null;
    if (sh != null) {
        if (useDispatch) {
            OnResultRunnable r = onResultRunnables.poll();
            if (r == null) {
                r = new OnResultRunnable(onResultRunnables);
            }
            r.init(sh, t);
            if (executorService == null || executorService.isShutdown()) {
                // Can't use the executor so call the runnable directly.
                // This may not be strictly specification compliant in all
                // cases but during shutdown only close messages are going
                // to be sent so there should not be the issue of nested
                // calls leading to stack overflow as described in bug
                // 55715. The issues with nested calls was the reason for
                // the separate thread requirement in the specification.
                r.run();
            } else {
                executorService.execute(r);
            }
        } else {
            if (t == null) {
                sh.onResult(new SendResult());
            } else {
                sh.onResult(new SendResult(t));
            }
        }
    }
}
 
开发者ID:liaokailin,项目名称:tomcat7,代码行数:47,代码来源:WsRemoteEndpointImplServer.java

示例4: endMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void endMessage(SendHandler handler, SendResult result) {
	boolean doWrite = false;
	MessagePart mpNext = null;
	synchronized (messagePartLock) {

		fragmented = nextFragmented;
		text = nextText;

		mpNext = messagePartQueue.poll();
		if (mpNext == null) {
			messagePartInProgress = false;
		} else if (!closed) {
			// Session may have been closed unexpectedly in the middle of
			// sending a fragmented message closing the endpoint. If this
			// happens, clearly there is no point trying to send the rest of
			// the message.
			doWrite = true;
		}
	}
	if (doWrite) {
		// Actual write has to be outside sync block to avoid possible
		// deadlock between messagePartLock and writeLock in
		// o.a.coyote.http11.upgrade.AbstractServletOutputStream
		writeMessagePart(mpNext);
	}

	wsSession.updateLastActive();

	// Some handlers, such as the IntermediateMessageHandler, do not have a
	// nested handler so handler may be null.
	if (handler != null) {
		handler.onResult(result);
	}
}
 
开发者ID:how2j,项目名称:lazycat,代码行数:35,代码来源:WsRemoteEndpointImplBase.java

示例5: clearHandler

import javax.websocket.SendHandler; //导入方法依赖的package包/类
/**
 *
 * @param t
 *            The throwable associated with any error that occurred
 * @param useDispatch
 *            Should {@link SendHandler#onResult(SendResult)} be called from
 *            a new thread, keeping in mind the requirements of
 *            {@link javax.websocket.RemoteEndpoint.Async}
 */
private void clearHandler(Throwable t, boolean useDispatch) {
	// Setting the result marks this (partial) message as
	// complete which means the next one may be sent which
	// could update the value of the handler. Therefore, keep a
	// local copy before signalling the end of the (partial)
	// message.
	SendHandler sh = handler;
	handler = null;
	buffers = null;
	if (sh != null) {
		if (useDispatch) {
			OnResultRunnable r = onResultRunnables.poll();
			if (r == null) {
				r = new OnResultRunnable(onResultRunnables);
			}
			r.init(sh, t);
			if (executorService == null || executorService.isShutdown()) {
				// Can't use the executor so call the runnable directly.
				// This may not be strictly specification compliant in all
				// cases but during shutdown only close messages are going
				// to be sent so there should not be the issue of nested
				// calls leading to stack overflow as described in bug
				// 55715. The issues with nested calls was the reason for
				// the separate thread requirement in the specification.
				r.run();
			} else {
				executorService.execute(r);
			}
		} else {
			if (t == null) {
				sh.onResult(new SendResult());
			} else {
				sh.onResult(new SendResult(t));
			}
		}
	}
}
 
开发者ID:how2j,项目名称:lazycat,代码行数:47,代码来源:WsRemoteEndpointImplServer.java

示例6: endMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void endMessage(SendHandler handler, SendResult result) {
    boolean doWrite = false;
    MessagePart mpNext = null;
    synchronized (messagePartLock) {

        fragmented = nextFragmented;
        text = nextText;

        mpNext = messagePartQueue.poll();
        if (mpNext == null) {
            messagePartInProgress = false;
        } else if (!closed){
            // Session may have been closed unexpectedly in the middle of
            // sending a fragmented message closing the endpoint. If this
            // happens, clearly there is no point trying to send the rest of
            // the message.
            doWrite = true;
        }
    }
    if (doWrite) {
        // Actual write has to be outside sync block to avoid possible
        // deadlock between messagePartLock and writeLock in
        // o.a.coyote.http11.upgrade.AbstractServletOutputStream
        writeMessagePart(mpNext);
    }

    wsSession.updateLastActive();

    handler.onResult(result);
}
 
开发者ID:deathspeeder,项目名称:class-guard,代码行数:31,代码来源:WsRemoteEndpointImplBase.java

示例7: clearHandler

import javax.websocket.SendHandler; //导入方法依赖的package包/类
/**
 *
 * @param t             The throwable associated with any error that
 *                      occurred
 * @param useDispatch   Should {@link SendHandler#onResult(SendResult)} be
 *                      called from a new thread, keeping in mind the
 *                      requirements of
 *                      {@link javax.websocket.RemoteEndpoint.Async}
 */
private void clearHandler(Throwable t, boolean useDispatch) {
    // Setting the result marks this (partial) message as
    // complete which means the next one may be sent which
    // could update the value of the handler. Therefore, keep a
    // local copy before signalling the end of the (partial)
    // message.
    SendHandler sh = handler;
    handler = null;
    if (sh != null) {
        if (useDispatch) {
            OnResultRunnable r = onResultRunnables.poll();
            if (r == null) {
                r = new OnResultRunnable(onResultRunnables);
            }
            r.init(sh, t);
            if (executorService == null || executorService.isShutdown()) {
                // Can't use the executor so call the runnable directly.
                // This may not be strictly specification compliant in all
                // cases but during shutdown only close messages are going
                // to be sent so there should not be the issue of nested
                // calls leading to stack overflow as described in bug
                // 55715. The issues with nested calls was the reason for
                // the separate thread requirement in the specification.
                r.run();
            } else {
                executorService.execute(r);
            }
        } else {
            if (t == null) {
                sh.onResult(new SendResult());
            } else {
                sh.onResult(new SendResult(t));
            }
        }
    }
}
 
开发者ID:deathspeeder,项目名称:class-guard,代码行数:46,代码来源:WsRemoteEndpointImplServer.java

示例8: send

import javax.websocket.SendHandler; //导入方法依赖的package包/类
@Override
public boolean send(Object message,
                    final boolean shouldClose,
                    final OnComplete onComplete) throws Exception {
    if (!isOpen()) {
        return false;
    }

    SendHandler handler = new SendHandler() {
        @Override
        public void onResult(SendResult sendResult) {
            Throwable ex = sendResult.getException();
            if (sendResult.isOK()) {
                if (shouldClose) {
                    try {
                        close();
                    } catch (IOException e) {
                        ex = e;
                    }
                }
            }
            notifyComplete(onComplete, ex);
        }
    };

    if (message == null) {
        handler.onResult(new SendResult());
    } else if (message instanceof String) {
        this.session.getAsyncRemote().sendText((String)message, handler);
    } else if (message instanceof byte[]) {
        this.session.getAsyncRemote().sendBinary(ByteBuffer.wrap((byte[])message), handler);
    } else {
        throw WebsocketUtil.wrongMessageType(message.getClass());
    }


    return true;
}
 
开发者ID:projectodd,项目名称:wunderboss,代码行数:39,代码来源:JavaxWebsocketChannel.java

示例9: startMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void startMessage(byte opCode, ByteBuffer payload, boolean last,
        SendHandler handler) {

    wsSession.updateLastActive();

    List<MessagePart> messageParts = new ArrayList<MessagePart>();
    messageParts.add(new MessagePart(last, 0, opCode, payload,
            intermediateMessageHandler,
            new EndMessageHandler(this, handler)));

    messageParts = transformation.sendMessagePart(messageParts);

    // Some extensions/transformations may buffer messages so it is possible
    // that no message parts will be returned. If this is the case the
    // trigger the suppler SendHandler
    if (messageParts.size() == 0) {
        handler.onResult(new SendResult());
        return;
    }

    MessagePart mp = messageParts.remove(0);

    boolean doWrite = false;
    synchronized (messagePartLock) {
        if (Constants.OPCODE_CLOSE == mp.getOpCode() && getBatchingAllowed()) {
            // Should not happen. To late to send batched messages now since
            // the session has been closed. Complain loudly.
            log.warn(sm.getString("wsRemoteEndpoint.flushOnCloseFailed"));
        }
        if (messagePartInProgress) {
            // When a control message is sent while another message is being
            // sent, the control message is queued. Chances are the
            // subsequent data message part will end up queued while the
            // control message is sent. The logic in this class (state
            // machine, EndMessageHandler, TextMessageSendHandler) ensures
            // that there will only ever be one data message part in the
            // queue. There could be multiple control messages in the queue.

            // Add it to the queue
            messagePartQueue.add(mp);
        } else {
            messagePartInProgress = true;
            doWrite = true;
        }
        // Add any remaining messages to the queue
        messagePartQueue.addAll(messageParts);
    }
    if (doWrite) {
        // Actual write has to be outside sync block to avoid possible
        // deadlock between messagePartLock and writeLock in
        // o.a.coyote.http11.upgrade.AbstractServletOutputStream
        writeMessagePart(mp);
    }
}
 
开发者ID:liaokailin,项目名称:tomcat7,代码行数:55,代码来源:WsRemoteEndpointImplBase.java

示例10: startMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void startMessage(byte opCode, ByteBuffer payload, boolean last, SendHandler handler) {

		wsSession.updateLastActive();

		List<MessagePart> messageParts = new ArrayList<MessagePart>();
		messageParts.add(new MessagePart(last, 0, opCode, payload, intermediateMessageHandler,
				new EndMessageHandler(this, handler)));

		messageParts = transformation.sendMessagePart(messageParts);

		// Some extensions/transformations may buffer messages so it is possible
		// that no message parts will be returned. If this is the case the
		// trigger the suppler SendHandler
		if (messageParts.size() == 0) {
			handler.onResult(new SendResult());
			return;
		}

		MessagePart mp = messageParts.remove(0);

		boolean doWrite = false;
		synchronized (messagePartLock) {
			if (Constants.OPCODE_CLOSE == mp.getOpCode() && getBatchingAllowed()) {
				// Should not happen. To late to send batched messages now since
				// the session has been closed. Complain loudly.
				log.warn(sm.getString("wsRemoteEndpoint.flushOnCloseFailed"));
			}
			if (messagePartInProgress) {
				// When a control message is sent while another message is being
				// sent, the control message is queued. Chances are the
				// subsequent data message part will end up queued while the
				// control message is sent. The logic in this class (state
				// machine, EndMessageHandler, TextMessageSendHandler) ensures
				// that there will only ever be one data message part in the
				// queue. There could be multiple control messages in the queue.

				// Add it to the queue
				messagePartQueue.add(mp);
			} else {
				messagePartInProgress = true;
				doWrite = true;
			}
			// Add any remaining messages to the queue
			messagePartQueue.addAll(messageParts);
		}
		if (doWrite) {
			// Actual write has to be outside sync block to avoid possible
			// deadlock between messagePartLock and writeLock in
			// o.a.coyote.http11.upgrade.AbstractServletOutputStream
			writeMessagePart(mp);
		}
	}
 
开发者ID:how2j,项目名称:lazycat,代码行数:53,代码来源:WsRemoteEndpointImplBase.java

示例11: startMessage

import javax.websocket.SendHandler; //导入方法依赖的package包/类
void startMessage(byte opCode, ByteBuffer payload, boolean last,
        SendHandler handler) {

    wsSession.updateLastActive();

    List<MessagePart> messageParts = new ArrayList<MessagePart>();
    messageParts.add(new MessagePart(last, 0, opCode, payload,
            intermediateMessageHandler,
            new EndMessageHandler(this, handler)));

    messageParts = transformation.sendMessagePart(messageParts);

    // Some extensions/transformations may buffer messages so it is possible
    // that no message parts will be returned. If this is the case the
    // trigger the suppler SendHandler
    if (messageParts.size() == 0) {
        handler.onResult(new SendResult());
        return;
    }

    MessagePart mp = messageParts.remove(0);

    boolean doWrite = false;
    synchronized (messagePartLock) {
        if (Constants.OPCODE_CLOSE == mp.getOpCode()) {
            try {
                setBatchingAllowed(false);
            } catch (IOException e) {
                log.warn(sm.getString(
                        "wsRemoteEndpoint.flushOnCloseFailed"), e);
            }
        }
        if (messagePartInProgress) {
            // When a control message is sent while another message is being
            // sent, the control message is queued. Chances are the
            // subsequent data message part will end up queued while the
            // control message is sent. The logic in this class (state
            // machine, EndMessageHandler, TextMessageSendHandler) ensures
            // that there will only ever be one data message part in the
            // queue. There could be multiple control messages in the queue.

            // Add it to the queue
            messagePartQueue.add(mp);
        } else {
            messagePartInProgress = true;
            doWrite = true;
        }
        // Add any remaining messages to the queue
        messagePartQueue.addAll(messageParts);
    }
    if (doWrite) {
        // Actual write has to be outside sync block to avoid possible
        // deadlock between messagePartLock and writeLock in
        // o.a.coyote.http11.upgrade.AbstractServletOutputStream
        writeMessagePart(mp);
    }
}
 
开发者ID:sdw2330976,项目名称:apache-tomcat-7.0.57,代码行数:58,代码来源:WsRemoteEndpointImplBase.java


注:本文中的javax.websocket.SendHandler.onResult方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。