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
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());
|
|
}
|
|
}
|
|
|
|
}
|
|
|