You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
4.0 KiB

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import java.net.Socket;
import java.util.ArrayList;
/**
* Created by itsmy on 15.08.2016.
*/
public class EventHandler {
/*TODO: разделить метод на несколько методов
* Метод записи ролей
* Метод сборки JSON
* Метод рассылки по клиентам
*/
public static synchronized void connect(Integer socketid, Integer partyid) throws ctException{
ArrayList<Integer> a = SocketMaps.getAllParty(partyid);
if(a.size() == 1) {
//Если клиент первым подключился, то он управляет
SocketMaps.setCreator(partyid, socketid);
SocketMaps.setRole(socketid, SocketMaps.Roles.CREATOR);
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT","SERVICE");
creator.add("ROLE", 0);
creator.add("ONLINE", 0);
JsonObject cc = creator.build();
SocketMaps.getClient(socketid).writeSocket(cc.toString());
} else if(a.size() > 1) {
//Если клиент уже не первый, то всем остальным клиентам идет рассылка о новом подключении
SocketMaps.setRole(socketid, SocketMaps.Roles.LISTNER);
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("ONLINE" , a.size()-1);
for (int i = 0; i < a.size(); i++) {
switch (SocketMaps.getRole(a.get(i))) {
case CREATOR:
JsonObject cc = creator.build();
SocketMaps.getClient(a.get(i)).writeSocket(cc.toString());
break;
case LISTNER:
JsonObjectBuilder listner = Json.createObjectBuilder();
listner.add("EVENT", "SERVICE");
listner.add("ROLE", 1);
listner.add("ONLINE", a.size() - 1);
JsonObject lc = listner.build();
SocketMaps.getClient(a.get(i)).writeSocket(lc.toString());
break;
}
}
}
}
public static JsonObject buildEvent(Integer socketid) throws ctException{
JsonObjectBuilder creator = Json.createObjectBuilder();
Integer pid = SocketMaps.getPID(socketid);
switch (SocketMaps.getEID(SocketMaps.getCreator(pid))){
case PLAY: creator.add("EVENT", "play");
break;
case PAUSE: creator.add("EVENT", "pause");
break;
case REWIND: creator.add("EVENT", "rewind");
break;
case DISCONNECT: SocketMaps.getClient(socketid).closeSocket();
return null;
}
creator.add(Protocol._1A.TIME, SocketMaps.getInfo(socketid).TIME);
creator.add(Protocol._1A.AID, SocketMaps.getInfo(socketid).AUDIOID);
creator.add(Protocol._1A.TRACKTIME, SocketMaps.getInfo(socketid).TRACKTIME);
creator.add(Protocol._1A.DURATION, SocketMaps.getInfo(socketid).DURATION);
creator.add(Protocol._1A.PLAYLIST, SocketMaps.getInfo(socketid).PLAYLIST);
creator.add(Protocol._1A.AP, SocketMaps.getInfo(socketid).AP);
JsonObject main = creator.build();
return main;
}
public static void sendClient(Integer socketid) throws ctException{
JsonObject main = buildEvent(socketid);
SocketMaps.getClient(socketid).writeSocket(main.toString());
}
public static void sendParty(Integer socketid) throws ctException{
JsonObject main = buildEvent(socketid);
if(main == null){return;}
ArrayList<Integer> a = SocketMaps.getAllParty(SocketMaps.getPID(socketid));
for (int i = 0; i < a.size(); i++) {
SocketMaps.getClient(a.get(i)).writeSocket(main.toString());
Console.socket(a.get(i),main.toString());
}
}
}