Package jp.ameba.mongo.protocol

Examples of jp.ameba.mongo.protocol.Request


  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
      throws Exception {
   
    Response response = (Response) e.getMessage();
    if (response != null) {
      Request request = requestMap.remove(response.getHeader().getResponseTo());
      if (request != null) {
        RequestFuture future = request.getFuture();
        if (future != null) {
          future.setResponse(response)
          future.setDone(true);
          synchronized (future) {
            future.notifyAll()
View Full Code Here


      ChannelHandlerContext ctx,
      MessageEvent e)
        throws Exception {
   
    // リクエストをバッファに変換して送信
    Request request = (Request) e.getMessage();
    RequestFuture future = new RequestFuture(request);
    request.setFuture(future);
   
    // チャネルを通して送信
    try {
      // バッファを確保
      OutputBuffer outputBuffer = new BasicOutputBuffer();
      BSONEncoder encoder = new BSONEncoder();
      encoder.set(outputBuffer);
      // リクエスト内容を出力
      writeRequest(request, encoder, outputBuffer);
     
      // Safeリクエストの場合は、 getLastError クエリを付加
      Request getLastError = null;
      BSONObject query = request.getConsistency().getLastErrorQuery();
      if (query != null) {
        getLastError = new Query(
            request.getDatabaseName(),
            "$cmd",
            0,
            1,
            query,
            null
        );
        getLastError.setFuture(future);
        writeRequest(getLastError, encoder, outputBuffer);
      }
     
      // ChannelBuffer を生成
      ChannelBuffer channelBuffer = ChannelBuffers.buffer(outputBuffer.size());
      outputBuffer.pipe(new ChannelBufferOutputStream(channelBuffer));
     
      // ChannelFuture を取得し RequestFuture に設定
      ChannelFuture channelFuture = e.getFuture();
      future.setChannelFuture(channelFuture);
     
      // 送信リエクスト一覧に future を追加
      OperationCode opCode = request.getHeader().getOpCode();
      // safeモード、もしくは返信が見込める場合は、リクエストIDを設定
      if (opCode.hasReply() || getLastError != null) {
        if (getLastError == null) {
          requestMap.put(future.getRequetId(), request);
          request.setWaitingRequestId(request.getRequestId());
        } else {
          requestMap.put(getLastError.getRequestId(), request);
          request.setWaitingRequestId(getLastError.getRequestId());
        }
      }
      Channels.write(ctx, channelFuture, channelBuffer);
     
    } catch (Exception ex) {
View Full Code Here

TOP

Related Classes of jp.ameba.mongo.protocol.Request

Copyright © 2018 www.massapicom. 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.