Fix MFC websocket communication
The protocol had been changed for the initial login sequence
This commit is contained in:
parent
7e4a6393b0
commit
d55f1c04ee
|
@ -139,7 +139,8 @@ public class MyFreeCams extends AbstractSite {
|
||||||
public Model createModelFromUrl(String url) {
|
public Model createModelFromUrl(String url) {
|
||||||
String[] patterns = new String[] {
|
String[] patterns = new String[] {
|
||||||
"https?://profiles.myfreecams.com/([^/]*?)",
|
"https?://profiles.myfreecams.com/([^/]*?)",
|
||||||
"https?://(?:www.)?myfreecams.com/#(.*)"
|
"https?://(?:www.)?myfreecams.com/#(.*)",
|
||||||
|
"https?://m.myfreecams.com/models/(.*)"
|
||||||
};
|
};
|
||||||
for (String pattern : patterns) {
|
for (String pattern : patterns) {
|
||||||
Matcher m = Pattern.compile(pattern).matcher(url);
|
Matcher m = Pattern.compile(pattern).matcher(url);
|
||||||
|
|
|
@ -68,7 +68,6 @@ public class MyFreeCamsClient {
|
||||||
private Integer cxid;
|
private Integer cxid;
|
||||||
private int[] ctx;
|
private int[] ctx;
|
||||||
private String ctxenc;
|
private String ctxenc;
|
||||||
private String chatToken;
|
|
||||||
private int sessionId;
|
private int sessionId;
|
||||||
private long heartBeat;
|
private long heartBeat;
|
||||||
private volatile boolean connecting = false;
|
private volatile boolean connecting = false;
|
||||||
|
@ -160,10 +159,8 @@ public class MyFreeCamsClient {
|
||||||
sessionStates.invalidateAll();
|
sessionStates.invalidateAll();
|
||||||
models.invalidateAll();
|
models.invalidateAll();
|
||||||
LOG.trace("open: [{}]", response.body().string());
|
LOG.trace("open: [{}]", response.body().string());
|
||||||
webSocket.send("hello fcserver\n");
|
|
||||||
webSocket.send("fcsws_20180422\n");
|
webSocket.send("fcsws_20180422\n");
|
||||||
webSocket.send(
|
login(webSocket);
|
||||||
"1 0 0 81 0 %7B%22err%22%3A0%2C%22start%22%3A0%2C%22stop%22%3A0%2C%22a%22%3A0%2C%22time%22%3A0%2C%22key%22%3A%22%22%2C%22cid%22%3A%22%22%2C%22pid%22%3A1%2C%22site%22%3A%22www%22%7D\n");
|
|
||||||
heartBeat = System.currentTimeMillis();
|
heartBeat = System.currentTimeMillis();
|
||||||
startKeepAlive(webSocket);
|
startKeepAlive(webSocket);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -232,7 +229,7 @@ public class MyFreeCamsClient {
|
||||||
case JOINCHAN:
|
case JOINCHAN:
|
||||||
case SESSIONSTATE:
|
case SESSIONSTATE:
|
||||||
if (!message.getMessage().isEmpty()) {
|
if (!message.getMessage().isEmpty()) {
|
||||||
// LOG.debug("SessionState: {}", message.getMessage());
|
//LOG.debug("SessionState: {}", message.getMessage());
|
||||||
JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class);
|
JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class);
|
||||||
try {
|
try {
|
||||||
SessionState sessionState = adapter.fromJson(message.getMessage());
|
SessionState sessionState = adapter.fromJson(message.getMessage());
|
||||||
|
@ -268,20 +265,7 @@ public class MyFreeCamsClient {
|
||||||
break;
|
break;
|
||||||
case EXTDATA:
|
case EXTDATA:
|
||||||
if (message.getArg1() == MessageTypes.LOGIN) {
|
if (message.getArg1() == MessageTypes.LOGIN) {
|
||||||
chatToken = message.getMessage();
|
|
||||||
String username = Config.getInstance().getSettings().mfcUsername;
|
|
||||||
if (StringUtil.isNotBlank(username)) {
|
|
||||||
boolean login = mfc.getHttpClient().login();
|
|
||||||
if (login) {
|
|
||||||
Cookie passcode = mfc.getHttpClient().getCookie("passcode");
|
|
||||||
webSocket.send("1 0 0 20071025 0 " + chatToken + "@1/" + username + ":" + passcode.value() + "\n");
|
|
||||||
} else {
|
|
||||||
LOG.error("Login failed");
|
|
||||||
webSocket.send("1 0 0 20080909 0 guest:guest\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
webSocket.send("1 0 0 20080909 0 guest:guest\n");
|
|
||||||
}
|
|
||||||
} else if (message.getArg1() == MessageTypes.MANAGELIST) {
|
} else if (message.getArg1() == MessageTypes.MANAGELIST) {
|
||||||
requestExtData(message.getMessage());
|
requestExtData(message.getMessage());
|
||||||
} else {
|
} else {
|
||||||
|
@ -321,6 +305,22 @@ public class MyFreeCamsClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void login(WebSocket webSocket) throws IOException {
|
||||||
|
String username = Config.getInstance().getSettings().mfcUsername;
|
||||||
|
if (StringUtil.isNotBlank(username)) {
|
||||||
|
boolean login = mfc.getHttpClient().login();
|
||||||
|
if (login) {
|
||||||
|
Cookie passcode = mfc.getHttpClient().getCookie("passcode");
|
||||||
|
webSocket.send("1 0 0 20071025 0 1/" + username + ":" + passcode.value() + "\n");
|
||||||
|
} else {
|
||||||
|
LOG.error("Login failed. Logging in as guest");
|
||||||
|
webSocket.send("1 0 0 20071025 0 1/guest:guest\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
webSocket.send("1 0 0 20071025 0 1/guest:guest\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void requestExtData(String message) {
|
private void requestExtData(String message) {
|
||||||
try {
|
try {
|
||||||
JSONObject json = new JSONObject(message);
|
JSONObject json = new JSONObject(message);
|
||||||
|
|
Loading…
Reference in New Issue