- package net.jrtechs.www.server.old;
-
- import net.jrtechs.www.graphDB.SteamGraph;
- import net.jrtechs.www.model.Player;
- import org.java_websocket.WebSocket;
- import org.json.JSONObject;
-
- import java.util.ArrayList;
- import java.util.List;
-
-
- /**
- * Client thread which gets graph information from
- * the graphDB and sends it to the client so that
- * they can render it in their web browser.
- *
- * @author Jeffery Russell 5-27-18
- */
- public class Client extends Thread
- {
- /** Web connection to the client */
- private WebSocket client;
-
- /** Graph interface to fetch data */
- private SteamGraph graph;
-
- /** base id to look at */
- private String baseId;
-
- /** JSONObjects to send the client */
- private List<JSONObject> queue;
-
-
- private int type;
-
-
- /**
- * Initializes the client with a steam graph and
- * web socket information.
- * @param client
- */
- public Client(WebSocket client, String id, int type)
- {
- this.client = client;
- this.graph = new SteamGraph();
- this.type = type;
- this.baseId = id;
- this.queue = new ArrayList<>();
- }
-
-
- /**
- * returns the web socket object
- *
- * @return
- */
- public WebSocket getSocket()
- {
- return this.client;
- }
-
-
- /**
- * Sends the client the request to add a new node to their
- * graph.
- *
- * @param p
- */
- private void sendNodeAdd(Player p, int x, int y, int size)
- {
- JSONObject request = new JSONObject();
- request.put("action", 1);
- request.put("id", p.getId());
- request.put("name", p.getName());
- request.put("size", size);
- request.put("x", x);
-
- request.put("y", y);
-
- this.sendJSON(request);
- }
-
-
- /**
- * Sends the client to request to connect two nodes
- * via an edge.
- *
- * @param p1
- * @param p2
- */
- private void sendEdgeAdd(Player p1, Player p2)
- {
- JSONObject request = new JSONObject();
- request.put("action", 2);
- request.put("id", p1.getId() + p2.getId());
- request.put("p1", p1.getId());
- request.put("p2", p2.getId());
-
- this.sendJSON(request);
- }
-
- /**
- * Tells the tells the js on the client side to start
- * the force applied to the graph
- */
- private void sendFinished()
- {
- JSONObject request = new JSONObject();
- request.put("action", 3);
- this.sendJSON(request);
- }
-
-
- /**
- * sends a json object to the client
- *
- * @param request
- */
- private void sendJSON(JSONObject request)
- {
- this.queue.add(request);
- }
-
-
- /**
- * Sends the next object to the client
- */
- public void sendNextRequest()
- {
- while(this.queue.isEmpty())
- {
- try
- {
- Thread.sleep(500);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- JSONObject send =queue.remove(0);
- this.client.send(send.toString());
- if(send.getInt("action") == 3)
- {
- this.client.close();
- }
- }
-
-
- /**
- * Sends an entire player and all of their friends to the client
- *
- * @param p
- */
- private void sendPlayerToClient(Player p, int x, int y,
- int gen, int multiplier)
- {
- if(gen == 1)
- {
- sendNodeAdd(p, x, y, 150);
- }
-
- List<Player> friends = p.getFriends();
-
- double radianStep = Math.PI * 2 / friends.size();
-
- double currentStep = 0;
-
- for(Player friend: friends)
- {
- if(gen == 1)
- {
- this.sendNodeAdd(friend, (int)(x + Math.cos(currentStep) *
- (multiplier/gen)), (int)(y + Math.sin(currentStep) *
- (multiplier/gen)), 150);
- }
- else
- {
- this.sendNodeAdd(friend, (int)(x + Math.cos(currentStep) *
- (multiplier/gen)), (int)(y + Math.sin(currentStep) *
- (multiplier/gen)), 30);
- }
-
- this.sendEdgeAdd(p, friend);
-
- currentStep += radianStep;
- }
- }
-
-
- /**
- * Generates a friends of friends graph for the client
- */
- private void friendsOfFriends()
- {
- Player b = this.graph.getPlayer(this.baseId);
-
- if(b == null)
- {
- this.sendPlayerNotFound();
- }
- else
- {
- List<Player> friends = b.getFriends();
- this.sendPlayerToClient(b, 300, 243, 1, 300);
-
- double radianStep = Math.PI * 2 / friends.size();
-
- double currentStep = 0;
-
-
- for(Player f : b.getFriends())
- {
- f = this.graph.getPlayer(f.getId());
- this.sendPlayerToClient(f, (int)(300 + Math.cos(currentStep) * 300),
- (int)(243 + Math.sin(currentStep) * 300) ,2, 300);
-
- currentStep += radianStep;
- }
- this.sendFinished();
- }
- }
-
-
- /**
- * Generates the friends with friends graph for the client
- *
- * Displays all of the requested ids friends, then it only adds edges
- * between players if they are both friends of yours.
- */
- private void friendsWithFriends()
- {
- Player b = this.graph.getPlayer(this.baseId);
-
- if(b == null)
- {
- this.sendPlayerNotFound();
- }
- else
- {
- this.sendPlayerToClient(b, 600, 440, 1, 600);
-
- for(Player f : b.getFriends()) //all my friends
- {
- f = this.graph.getPlayer(f.getId());
- for(Player ff : f.getFriends()) // all my friends friends
- {
- for(Player f2 : b.getFriends()) // all my friends
- {
- if(f2.getId().equals(ff.getId()))
- {
- this.sendEdgeAdd(f, ff);
- }
- }
- }
- }
- this.sendFinished();
- }
- }
-
-
- /**
- * Tells the client that the steam id provided was invalid
- */
- private void sendPlayerNotFound()
- {
- JSONObject request = new JSONObject();
- request.put("action", -1);
- this.sendJSON(request);
- }
-
-
- /**
- * Where the magic happens
- */
- @Override
- public void run()
- {
- if(this.type == 1)
- {
- friendsOfFriends();
- }
- else
- {
- friendsWithFriends();
- }
- }
- }
|