Scala version of an emailer. So far it finds the lazy players. It needs to send them email yet.
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4 * The contents of this file are subject to the terms of either the GNU
5 * General Public License Version 2 only ("GPL") or the Common
6 * Development and Distribution License("CDDL") (collectively, the
7 * "License"). You may not use this file except in compliance with the
8 * License. You can obtain a copy of the License at
9 * http://www.netbeans.org/cddl-gplv2.html
10 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
11 * specific language governing permissions and limitations under the
12 * License. When distributing the software, include this License Header
13 * Notice in each file and include the License file at
14 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
15 * particular file as subject to the "Classpath" exception as provided
16 * by Sun in the GPL Version 2 section of the License file that
17 * accompanied this code. If applicable, add the following below the
18 * License Header, with the fields enclosed by brackets [] replaced by
19 * your own identifying information:
20 * "Portions Copyrighted [year] [name of copyright owner]"
24 * Portions Copyrighted 2009 Jaroslav Tulach
27 package cz.xelfi.quoridor.emailer
32 import scala.collection.Map
33 import scala.collection.mutable.HashMap
36 def main(args: Array[String]) {
37 val api = new URL("http://quoridor.xelfi.cz/api/");
39 val id = login(api, "emailer", "otravuj")
40 Console.println("id: " + id)
46 for (val address <- emails(api, id, ret.keySet)) {
47 Console.println(address)
51 def login(url : URL, name : String, password : String) : String = {
52 val u = new URL(url, "login?name=" + name + "&password=" + password);
53 val conn = u.openConnection.asInstanceOf[java.net.HttpURLConnection]
54 conn.setRequestMethod("PUT")
57 val reply = Source.fromInputStream(conn.getInputStream)
58 return reply.mkString("")
61 def allPlayers(url : URL, okDelay : Long): Map[String,List[Node]] = {
62 val u = new URL(url, "games");
63 val conn = u.openConnection
64 conn.setRequestProperty("Accept", "text/xml")
66 val ret = new HashMap[String,List[Node]]
68 val before = System.currentTimeMillis - okDelay
69 val games = XML.load(conn.getInputStream)
70 for (val g : Node <- games \\ "gameId") {
71 val modified = (g \\ "@modified").text.toLong
72 if (modified < before) {
73 val status = (g \\ "@status").text;
75 if (status == "blackMove") {
77 } else if (status == "whiteMove") {
83 val prev = ret.getOrElse(name, Nil)
92 def emails(url : URL, loginID : String, ids : Collection[String]): List[String] = {
93 var ret : List[String] = Nil;
95 val u = new URL(url, "users/" + p + "?loginID=" + loginID)
96 val conn = u.openConnection
97 conn.setRequestProperty("Accept", "text/xml")
98 val xml = XML.load(conn.getInputStream)
99 val res = (xml \\ "property").filter({
100 n => n.attribute("name") match {
101 case Some(attr) => attr.text == "email"
106 ret = res(0).text :: ret;