/** * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ * * Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). * * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation; either version 2.1 of the License, or (at your option) any later * version. * * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. * */ package connection; import java.util.ArrayList; import java.util.Scanner; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.io.File; import java.io.FileReader; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.regex.Pattern; import java.util.regex.Matcher; /** * @author Chad Pilkey <capilkey@gmail.com> * @version 1.0 * @since 2012-03-05 */ public class JedisConnection { JedisPool redisPool; String pollKey; String title; String question; String multiple; ArrayList<String> answers; String curWebKey; ArrayList<String> pollsVoted = new ArrayList<String>(); private static String BBB_FILE = "/var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties"; private static String BBB_SERVER_FIELD = "bigbluebutton.web.serverURL"; public static Jedis dbConnect(){ String serverIP = "127.0.0.1"; //String serverIP = getLocalIP(); //serverIP = serverIP.substring(7); JedisPool redisPool = new JedisPool(serverIP, 6379); try{ return redisPool.getResource(); } catch (Exception e){ //log.error("Error in PollApplication.dbConnect():"); ///log.error(e.toString()); } //log.error("Returning NULL from dbConnect()"); return null; } /*private static String getLocalIP() { File parseFile = new File(BBB_FILE); try{ Scanner scanner = new Scanner(new FileReader(parseFile)); Boolean found = false; String serverAddress = ""; while (!found && scanner.hasNextLine()){ serverAddress = processLine(scanner.nextLine()); if (!serverAddress.equals("")){ found = true; } } scanner.close(); return serverAddress; } catch (Exception e){ //log.error("Error in scanning " + BBB_FILE + " to find server address."); } return null; } private static String processLine(String line) { //use a second Scanner to parse the content of each line Scanner scanner = new Scanner(line); scanner.useDelimiter("="); if ( scanner.hasNext() ){ String name = scanner.next(); if (name.equals(BBB_SERVER_FIELD)){ String value = scanner.next(); return value; } } return ""; }*/ /** * Retrieves a poll from the local computer's Redis database. * * @param webKey 4 digit number for poll you want * @return Returns true if the poll is retrieved otherwise false */ public boolean retrievePoll(String webKey) { Jedis jedis = dbConnect(); if (jedis.exists(webKey) && jedis.hget(jedis.get(webKey), "title") != null) { curWebKey = webKey; pollKey = jedis.get(webKey); title = jedis.hget(pollKey, "title"); question = jedis.hget(pollKey, "question"); multiple = jedis.hget(pollKey, "multiple"); long pollSize = jedis.hlen(pollKey); int otherFields = 10; long numAnswers = (pollSize-otherFields)/2; answers = new ArrayList <String>(); for (int j = 1; j <= numAnswers; j++) { answers.add(jedis.hget(pollKey, "answer"+j+"text")); } return true; } else return false; } /** * Increases the passed answer's vote count by one and also increases * the total votes by one. * * @param vote the answer number of the answer to be increased */ public void recordRadioVote(String vote) { Jedis jedis = dbConnect(); jedis.hincrBy(pollKey, "totalVotes", 1); jedis.hincrBy(pollKey, "answer"+vote, 1); pollsVoted.add(curWebKey); } /** * Increases each of the passed answers' vote counts by one and * increases the total votes by one. * * @param votes the answer numbers to be increased */ public void recordCheckVote(String [] votes) { Jedis jedis = dbConnect(); jedis.hincrBy(pollKey, "totalVotes", 1); for (int i=0; i<votes.length; i++) { jedis.hincrBy(pollKey, "answer"+votes[i], 1); } pollsVoted.add(curWebKey); } /** * Tries to find the passed webkey in the contents of the passed string. * * @param cv the contents of the bigbluebutton cookie * @param webkey the webkey that you want to search for * @return true if the webkey is found, otherwise false */ public boolean cookieCheck(String cv, String webkey) { Pattern p = Pattern.compile(","+webkey+","); Matcher m = p.matcher(cv); return m.find(0); } /** * Checks the passed webkey for any non-digit character. * * @param key the webkey that you want to check * @return true if a non-digit character is found, otherwise false */ public boolean cleanWebKey(String key) { Pattern p = Pattern.compile("[^\\d]"); Matcher m = p.matcher(key); return m.find(0); } /** * Checks the current object to see if the poll has already been voted on. * * @param poll poll to try and find * @return true if the poll has already been voted on, otherwise false */ public boolean sessionVoted(String poll) { return pollsVoted.contains(poll); } public String getTitle() { return title; } public String getQuestion() { return question; } public String getMultiple() { return multiple; } public String [] getAnswers() { String [] temp = new String [answers.size()]; return answers.toArray(temp); } public String getWebKey() { return curWebKey; } }