Package galena.message

Examples of galena.message.StandAloneCommandHandler


    return null;
  }
  @Override
  public void registerHandler() {
    super.registerHandler();
    StandAloneCommandHandler cmdH = new StandAloneCommandHandler(getCommandPrefix() + "/statusImage") {
      class ByteCounter {
        public int bytes;
      }
      public StandAloneMessageHandler setUserLevel(int userlevel) {
        separator = "/";
        return super.setUserLevel(userlevel);
      }
      public Message getAddHandlerMessage() {
        return (new URLMessage()).setLineString(this.getCommand()).setMessagetype(Message.MSG_ADD_HANDLER).setFrom(this).parse();
      }
      public int handleMessage(Message msg) {
        HTTPServer.Data data = (HTTPServer.Data)msg.getFrom();
        //Args args = new Args(data.request,data.response,data.session,msg,data);
        final Args args = httpModule.createArgs(data,msg);
        args.res.setHeader("content-type:","image/png");
        boolean small = args.req.getValue("small","0").contains("1");
        BufferedImage image = new BufferedImage((small ? 200 : 400),(small ? 16 : 25),BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = image.createGraphics();
        Color transparent = new Color(1f,1f,1f,1f);
        g.setBackground(transparent);
        g.setColor(transparent);
        g.fillRect(0,0,image.getWidth(),image.getHeight());
        g.setColor(Color.BLACK);

        if(args.msg.getMsgParameter() > 0) {
          String jid = args.msg.getMsgParameter(0);
          Presence presence = bot.getPresenceOf(jid);
          g.drawImage(getImage(presence),1,(small ? 0 : 5),null);
          PresenceWrapper wrapper = null;
          if(presence == null) {
            for(String user : bot.presences.keySet()) {
              if(StringUtils.parseBareAddress(user).equals(StringUtils.parseBareAddress(jid))) {
                PresenceWrapper myWrapper = bot.presences.get(user);
                if(wrapper == null || wrapper.date.before(myWrapper.date))
                  wrapper = myWrapper;
              }
            }
          } else {
            wrapper = bot.presences.get(presence.getFrom());
          }
          if(wrapper != null && wrapper.presence != presence)
            wrapper = null;
          StringBuffer buf = new StringBuffer();
          if(!small) buf.append(jid).append(": ");
          if(presence == null)
            buf.append("Offline");
          else {
            if(presence.getType() == Presence.Type.AVAILABLE) {
              buf.append(presence.getMode().toString());
              //.append(" - ").append(presence.getStatus());
              if(!small && presence.getStatus() != null)
                g.drawString(presence.getStatus(),20,22);
            } else {
              buf.append("Offline");
              if(presence.getStatus() != null)
                buf.append(" ").append(presence.getStatus());
            }
            if(!small && wrapper != null) {
              buf.append(" (since ").append(new SimpleDateFormat("HH:mm:ss").format(wrapper.date)).append(")");
            }
          }
          g.drawString(buf.toString(),20,10);
        } else {
          g.drawString("ERROR: No JID ?!",20,10);
        }
       
       
        final ByteCounter byteCounter = new ByteCounter(); byteCounter.bytes = 0;
        try {
          ImageIO.write(image,"png",new OutputStream() {
            public void write(int b) throws IOException {
              args.res.print((char)b);
              byteCounter.bytes++;
            }
          });
          args.res.flush();
        } catch (IOException e) {
          e.printStackTrace();
        }
        msg.reply(new Message(Message.MSG_INTERN).setLineString("logsize " + byteCounter.bytes).parse());
        return 1;
      }
    };
    cmdH.setUserLevel(-1);
    kernel.registerCommandHandler(cmdH);
    cmdH = new StandAloneCommandHandler(getCommandPrefix() + "/statsImage") {
      class ByteCounter {
        public int bytes;
      }
      public StandAloneMessageHandler setUserLevel(int userlevel) {
        separator = "/";
        return super.setUserLevel(userlevel);
      }
      public Message getAddHandlerMessage() {
        return (new URLMessage()).setLineString(this.getCommand()).setMessagetype(Message.MSG_ADD_HANDLER).setFrom(this).parse();
      }
      public final Color availablecolors[] = { Color.gray,Color.blue,Color.red,Color.green,Color.yellow,Color.cyan,Color.magenta,Color.darkGray,Color.lightGray,Color.orange,Color.pink };
      public int handleMessage(Message msg) {
        HTTPServer.Data data = (HTTPServer.Data)msg.getFrom();
        //Args args = new Args(data.request,data.response,data.session,msg,data);
        final Args args = httpModule.createArgs(data,msg);
        if(args.msg.getMsgParameter() < 1) return 0;
        String jid = args.msg.getMsgParameter(0).toLowerCase();
        boolean showmodes = Boolean.parseBoolean(args.req.getValue("showmodes","true"));
        boolean showgames = Boolean.parseBoolean(args.req.getValue("showgames","true"));
        int width = Integer.parseInt(args.req.getValue("width","500"));
        int height = Integer.parseInt(args.req.getValue("height","500"));
        args.res.setHeader("content-type:","image/png");

        List<Map<String,Object>> getjidID = db.getListOfMaps("SELECT * FROM goim_stats_jid WHERE jid = ?",jid);
        if(getjidID.size() > 0) {
          final int DAYCOUNT = 14;
          final int MAXTYPES = 10;
          double[][] points = new double[ MAXTYPES ][ DAYCOUNT ];
          String[] labels = new String[MAXTYPES];
          String[] xAxisLabels = new String[DAYCOUNT];
          int jidID = (Integer)getjidID.get(0).get("id");
          List<Map<String, Object>> days = db.getListOfMaps("SELECT * FROM goim_stats_day WHERE jid = ? ORDER BY day DESC LIMIT 14",jidID);
          int i = DAYCOUNT - days.size();
          for(i = 0 ; i < (DAYCOUNT - days.size()) ; i++) {
            xAxisLabels[i] = "undefined ?";
          }
          i = DAYCOUNT-1;
          for(Map<String, Object> day : days) {
            if(showmodes) {
              List<Map<String, Object>> presences = db.getListOfMaps("SELECT * FROM goim_stats_presencestatus WHERE day = ?",day.get("id"));
              for(Map<String,Object> presence : presences) {
                String mode = (String)presence.get("mode");
                int duration = (Integer)presence.get("duration");
                int j = 0;
                for(; j < MAXTYPES ; j++) {
                  if(labels[j] == null) {
                    labels[j] = mode; break;
                  } else if(labels[j].equals(mode))
                    break;
                }
                if(j == MAXTYPES) {
                  System.err.println("Too much modes ?! Mode: " + mode);
                  break;
                }
                points[j][i] = ((double)duration) / ((double)60);
              }
            }
            if(showgames) {
              List<Map<String, Object>> games = db.getListOfMaps("SELECT * FROM goim_stats_game WHERE day = ?",day.get("id"));
              for(Map<String,Object> game : games) {
                String gamestr = (String)game.get("game");
                int duration = (Integer)game.get("duration");
                int j = 0;
                for(; j < MAXTYPES ; j++) {
                  if(labels[j] == null) {
                    labels[j] = gamestr; break;
                  } else if(labels[j].equals(gamestr))
                    break;
                }
                if(j == MAXTYPES) {
                  System.err.println("Too much modes ?! Mode: " + gamestr);
                  break;
                }
                points[j][i] = ((double)duration) / ((double)60);
              }
            }
            xAxisLabels[i] = day.get("day").toString();
            i--;
          }
         
          int realcount = -1;
          for(i = 0 ; i < labels.length ; i++) {
            if(labels[i] == null) { realcount = i; break; }
          }
          if(realcount != labels.length) {
            double[][] originalpoints = points;
            String[] originallabels = labels;
            points = new double[ realcount ][ DAYCOUNT ];
            labels = new String[ realcount ];
            for(i = 0 ; i < realcount ; i++ ) {
              points[i] = originalpoints[i];
              labels[i] = originallabels[i];
            }
          }
         
          Stroke[] strokes = new Stroke[realcount];
          Shape[] shapes = new Shape[realcount];
          for(int j = 0 ; j < realcount ; j++) {
            strokes[j] = LineChartProperties.DEFAULT_LINE_STROKE;
            shapes[j] = PointChartProperties.SHAPE_CIRCLE;
          }

          LineChartProperties lineChartProperties = new LineChartProperties(strokes,shapes);
          try {
            Paint[] paint = new Paint[labels.length];
            for(int j = 0 ; j < paint.length ; j++) {
              paint[j] = availablecolors[j];
            }
            AxisChartDataSet axisChartDataSet = new AxisChartDataSet(points,labels,paint,ChartType.LINE,lineChartProperties);
            DataSeries dataSeries = new DataSeries(xAxisLabels,"Date","Time in Hours","Online Statistics for " + jid);
            dataSeries.addIAxisPlotDataSet(axisChartDataSet);
           
            ChartProperties chartProperties = new ChartProperties();
            AxisProperties axisProperties = new AxisProperties( );
            axisProperties.setXAxisLabelsAreVertical(true);
            DataAxisProperties dataAxisProperties= (DataAxisProperties) axisProperties.getYAxisProperties();
            dataAxisProperties.setRoundToNearest(-1);
            LegendProperties legendProperties = new LegendProperties();
            legendProperties.setPlacement(LegendProperties.RIGHT);
            legendProperties.setNumColumns(1);
           
            AxisChart axisChart = new AxisChart(dataSeries,chartProperties,axisProperties,legendProperties,width,height);
            final ByteCounter byteCounter = new ByteCounter(); byteCounter.bytes = 0;
            PNGEncoder.encode(axisChart,new OutputStream() {
              public void write(int b) throws IOException {
                args.res.print((char)b);
                byteCounter.bytes++;
              }
            });
            args.res.flush();
            msg.reply(new Message(Message.MSG_INTERN).setLineString("logsize " + byteCounter.bytes).parse());
            return 1;
          } catch (ChartDataException e) {
            e.printStackTrace();
          } catch (PropertyException e) {
            e.printStackTrace();
          } catch (Exception e) {
            e.printStackTrace();
          }
         
        }
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = image.createGraphics();
        g.setBackground(Color.WHITE);
        g.setColor(Color.BLACK);
        g.drawString("Error while creating Statistics.",5,15);
        final ByteCounter byteCounter = new ByteCounter(); byteCounter.bytes = 0;
        try {
          ImageIO.write(image,"png",new OutputStream() {
            public void write(int b) throws IOException {
              args.res.print((char)b);
              byteCounter.bytes++;
            }
          });
          args.res.flush();
        } catch (IOException e) {
          e.printStackTrace();
        }
        msg.reply(new Message(Message.MSG_INTERN).setLineString("logsize " + byteCounter.bytes).parse());
        //msg.reply(new Message(Message.MSG_INTERN).setLineString("logsize " + byteCounter.bytes).parse());
        return 1;
      }
    };
    cmdH.setUserLevel(-1);
    kernel.registerCommandHandler(cmdH);
  }
View Full Code Here


  }

  @Override
  public void registerHandler() {
    super.registerHandler();
    StandAloneCommandHandler cmdH = new StandAloneCommandHandler(getCommandPrefix() + "/statusImage") {
      class ByteCounter {
        public int bytes;
      }
      public StandAloneMessageHandler setUserLevel(int userlevel) {
        separator = "/";
        return super.setUserLevel(userlevel);
      }
      public Message getAddHandlerMessage() {
        return (new URLMessage()).setLineString(this.getCommand()).setMessagetype(Message.MSG_ADD_HANDLER).setFrom(this).parse();
      }
      public int handleMessage(Message msg) {
        HTTPServer.Data data = (HTTPServer.Data)msg.getFrom();
        //Args args = new Args(data.request,data.response,data.session,msg,data);
        final Args args = httpModule.createArgs(data,msg);
        // We won't need a session .. and we don't want it to be saved TODO: Remove the cookie (not actually necessary but would be nice :) )
        if(args.session.getHits() == 1) args.session.destroy();
        args.res.setHeader("content-type:","image/png");
        boolean small = args.req.getValue("small","0").equals("1");
        int width = Integer.parseInt(args.req.getValue("width","-1"));
        if(width < 0) width = small ? 250:350;
        BufferedImage image = new BufferedImage(width,16,BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = image.createGraphics();
        Color transparent = new Color(1f,1f,1f,1f);
        g.setBackground(transparent);
        g.setColor(transparent);
        g.fillRect(0,0,image.getWidth(),image.getHeight());
        g.setColor(Color.BLACK);

        if(args.msg.getMsgParameter() > 0) {
          String racerName = args.msg.getMsgParameter(0).replace("%20"," ").toLowerCase();
          LFSHost host = lfs.racersOnline.get(racerName);
          g.drawImage(getImage(host),1,0,null);
          StringBuffer buf = new StringBuffer();
          if(!small) buf.append(racerName).append(": ");
          if(host == null) {
            buf.append("Offline");
          } else {
            if(!small)
              buf.append("Online at ");
            buf.append(host.name.replaceAll("\\^\\d",""));
          }
          g.drawString(buf.toString(),20,10);
        } else {
          g.drawString("ERROR: No Racername ?!",20,10);
        }
       
       
        final ByteCounter byteCounter = new ByteCounter(); byteCounter.bytes = 0;
        try {
          ImageIO.write(image,"png",new OutputStream() {
            public void write(int b) throws IOException {
              args.res.print((char)b);
              byteCounter.bytes++;
            }
          });
          args.res.flush();
        } catch (IOException e) {
          e.printStackTrace();
        }
        msg.reply(new Message(Message.MSG_INTERN).setLineString("logsize " + byteCounter.bytes).parse());
        return 1;
      }
    };
    cmdH.setUserLevel(-1);
    kernel.registerCommandHandler(cmdH);
  }
View Full Code Here

TOP

Related Classes of galena.message.StandAloneCommandHandler

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.