?? xmppchannel.java
字號:
package org.codehaus.xfire.xmpp;import java.io.ByteArrayOutputStream;import javax.xml.stream.XMLStreamWriter;import org.codehaus.xfire.MessageContext;import org.codehaus.xfire.XFireException;import org.codehaus.xfire.XFireRuntimeException;import org.codehaus.xfire.exchange.InMessage;import org.codehaus.xfire.exchange.OutMessage;import org.codehaus.xfire.fault.XFireFault;import org.codehaus.xfire.soap.SoapSerializer;import org.codehaus.xfire.transport.AbstractChannel;import org.codehaus.xfire.transport.Channel;import org.codehaus.xfire.util.STAXUtils;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.filter.ToContainsFilter;import org.jivesoftware.smack.packet.IQ;import org.jivesoftware.smack.packet.XMPPError;public class XMPPChannel extends AbstractChannel{ private XMPPConnection conn; private String currentId; // hack to allow synchronous single threaded calls via the Client public XMPPChannel(String uri, XMPPTransport transport) { setUri(uri); setTransport(transport); } public void open() throws XFireException { if (conn != null) return; XMPPTransport transport = (XMPPTransport) getTransport(); try { conn = new XMPPConnection(transport.getServer()); conn.login(transport.getUsername(), transport.getPassword(), getUri()); conn.addPacketListener(new ChannelPacketListener(transport.getXFire(), this), new ToContainsFilter(transport.getUsername())); } catch (XMPPException e) { throw new XFireException("Couldn't open channel.", e); } } public void send(MessageContext context, OutMessage message) throws XFireFault { XMPPTransport transport = (XMPPTransport) getTransport(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { context.setProperty(SoapSerializer.SERIALIZE_PROLOG, Boolean.FALSE); final XMLStreamWriter writer = STAXUtils.createXMLStreamWriter(out, message.getEncoding(),context); message.getSerializer().writeMessage(message, writer, context); writer.flush(); writer.close(); out.flush(); out.close(); } catch (Exception e) { throw new XFireRuntimeException("Couldn't write stream.", e); } currentId = context.getId(); SoapEnvelopePacket response = new SoapEnvelopePacket(out.toString()); response.setFrom(conn.getUser()); if (message.getUri().equals(Channel.BACKCHANNEL_URI)) { SoapEnvelopePacket req = (SoapEnvelopePacket) context.getProperty(ChannelPacketListener.PACKET); response.setTo(req.getFrom()); response.setType(IQ.Type.RESULT); response.setPacketID(req.getPacketID()); } else { response.setTo(message.getUri()); } XMPPError error = (XMPPError) context.getProperty(XMPPFaultHandler.XMPP_ERROR); if (error != null) response.setError(error); conn.sendPacket(response); } public void receive(MessageContext context, InMessage message) { context.setId(currentId); super.receive(context, message); } public void close() { if (conn != null) conn.close(); super.close(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -