Skip to content

Instantly share code, notes, and snippets.

@ericnormand
Created November 28, 2014 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericnormand/19787461b47fe5d7b4fc to your computer and use it in GitHub Desktop.
Save ericnormand/19787461b47fe5d7b4fc to your computer and use it in GitHub Desktop.
Examples how to handle EDN messages to/from sente
package edntester;
import us.bpsm.edn.Keyword;
import us.bpsm.edn.parser.Parseable;
import us.bpsm.edn.parser.Parser;
import us.bpsm.edn.parser.Parsers;
import us.bpsm.edn.printer.Printers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import static us.bpsm.edn.Keyword.newKeyword;
import static us.bpsm.edn.parser.Parsers.defaultConfiguration;
/**
* Created by eric on 11/28/14.
*/
public class EdnTester {
public static final Keyword clientSearch = newKeyword("client", "search");
public static final Keyword serverSearchResult = newKeyword("server", "search-result");
public static String randomMessageID() {
Random rand = new Random();
StringBuilder sb = new StringBuilder();
String chars = "0123456789abcdef";
for(int i = 0; i < 6; i++) {
int r = rand.nextInt(chars.length());
sb.append(chars.charAt(r));
}
return sb.toString();
}
public static String searchMessage(String query, long page) {
ArrayList<java.io.Serializable> outer = new ArrayList<java.io.Serializable>();
ArrayList<Object> inner = new ArrayList<Object>();
Map<Object, Object> data = new HashMap<Object, Object>();
data.put(newKeyword("query"), query);
data.put(newKeyword("page"), 1);
outer.add(inner);
outer.add(randomMessageID());
inner.add(clientSearch);
inner.add(data);
return Printers.printString(outer);
}
public static List<Message> readMessagesFromFrame(String frame) {
Parseable pbr = Parsers.newParseable(frame);
Parser p = Parsers.newParser(defaultConfiguration());
List<Message> ret = new ArrayList<Message>();
List<List<Object>> rawMessages = (List<List<Object>>)p.nextValue(pbr);
for(List<Object> message : rawMessages) {
Keyword messageName = (Keyword)message.get(0);
Map<Keyword, Object> data = (Map<Keyword, Object>)message.get(1);
ret.add(new Message(messageName, data));
}
return ret;
}
public static void dispatchMessage(Message message) {
if(message.type.equals(serverSearchResult)) {
handleSearchResult(message);
}
// ...
}
private static void handleSearchResult(Message message) {
// ....
}
public static void main(String [] args) {
System.out.println(searchMessage("dude", 1));
}
}
package edntester;
import us.bpsm.edn.Keyword;
import java.security.Key;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Created by eric on 11/28/14.
*/
public class Message {
public final Keyword type;
public final Map<Keyword, Object> data;
public Message(Keyword type, Map<Keyword, Object> data) {
this.type = type;
this.data = Collections.unmodifiableMap(new HashMap<Keyword, Object>(data));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment