Package com.sissi.pipeline.in.iq.si

Source Code of com.sissi.pipeline.in.iq.si.Si2DelegationProcessor

package com.sissi.pipeline.in.iq.si;

import com.sissi.context.JIDContext;
import com.sissi.pipeline.TransferBuilder;
import com.sissi.pipeline.TransferParam;
import com.sissi.pipeline.in.ProxyProcessor;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.ProtocolType;
import com.sissi.protocol.iq.bytestreams.Bytestreams;
import com.sissi.protocol.iq.data.XData;
import com.sissi.protocol.iq.data.XDataType;
import com.sissi.protocol.iq.data.XField;
import com.sissi.protocol.iq.data.XValue;
import com.sissi.protocol.iq.si.Feature;
import com.sissi.protocol.iq.si.Si;
import com.sissi.server.exchange.ExchangerContext;

/**
* 离线文件接收
*
* @author kim 2014年2月24日
*/
public class Si2DelegationProcessor extends ProxyProcessor {

  private final Feature feature = new Feature().x(new XData().setType(XDataType.SUBMIT).add(new XField().setVar("stream-method").add(new XValue(Bytestreams.XMLNS))));

  private final ExchangerContext exchangerContext;

  private final TransferBuilder transferBuilder;

  private final boolean resource;

  public Si2DelegationProcessor(ExchangerContext exchangerContext, TransferBuilder transferBuilder, boolean resource) {
    super();
    this.exchangerContext = exchangerContext;
    this.transferBuilder = transferBuilder;
    this.resource = resource;
  }

  @Override
  public boolean input(JIDContext context, Protocol protocol) {
    Si si = protocol.cast(Si.class).setFeature(this.feature);
    this.exchangerContext.wait(si.host(context.jid().asString(this.resource), super.build(si.parent().getTo()).asString(this.resource)), true, this.transferBuilder.build(new SiTransferParam(si)));
    context.write(si.parent().reply().setType(ProtocolType.RESULT));
    return true;
  }

  private class SiTransferParam implements TransferParam {

    private final Si si;

    public SiTransferParam(Si si) {
      super();
      this.si = si;
    }

    @Override
    public <T> T find(String key, Class<T> clazz) {
      switch (key) {
      case TransferParam.KEY_SI:
        return clazz.cast(this.si);
      }
      return null;
    }
  }
}
TOP

Related Classes of com.sissi.pipeline.in.iq.si.Si2DelegationProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.