Add proper login and follow/unfollow to MyFreeCamsClient

This commit is contained in:
0xboobface 2018-10-24 19:55:31 +02:00
parent 9ef9841a19
commit b80fbd4c30
3 changed files with 71 additions and 54 deletions

View File

@ -100,7 +100,7 @@ public class MyFreeCams implements Site {
@Override @Override
public boolean supportsFollow() { public boolean supportsFollow() {
return false; return true;
} }
@Override @Override

View File

@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import org.eclipse.jetty.util.StringUtil;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -26,6 +27,8 @@ import com.google.common.collect.EvictingQueue;
import com.squareup.moshi.JsonAdapter; import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi; import com.squareup.moshi.Moshi;
import ctbrec.Config;
import okhttp3.Cookie;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import okhttp3.WebSocket; import okhttp3.WebSocket;
@ -52,6 +55,8 @@ 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 EvictingQueue<String> receivedTextHistory = EvictingQueue.create(100); private EvictingQueue<String> receivedTextHistory = EvictingQueue.create(100);
@ -125,17 +130,10 @@ public class MyFreeCamsClient {
try { try {
LOG.trace("open: [{}]", response.body().string()); LOG.trace("open: [{}]", response.body().string());
webSocket.send("hello fcserver\n"); webSocket.send("hello fcserver\n");
// webSocket.send("fcsws_20180422\n"); webSocket.send("fcsws_20180422\n");
// webSocket.send("1 0 0 81 0 %7B%22err%22%3A0%2C%22start%22%3A1540159843072%2C%22stop%22%3A1540159844121%2C%22a%22%3A6392%2C%22time%22%3A1540159844%2C%22key%22%3A%228da80f985c9db390809713dac71df297%22%2C%22cid%22%3A%22c504d684%22%2C%22pid%22%3A1%2C%22site%22%3A%22www%22%7D\n"); // TODO find out, what the values in the json message mean, at the moment we hust send 0s, which seems to work, too
// TxCmd Sending - nType: 1, nTo: 0, nArg1: 20080909, nArg2: 0, sMsg:guest:guest // webSocket.send("1 0 0 81 0 %7B%22err%22%3A0%2C%22start%22%3A1540159843072%2C%22stop%22%3A1540159844121%2C%22a%22%3A6392%2C%22time%22%3A1540159844%2C%22key%22%3A%228da80f985c9db390809713dac71df297%22%2C%22cid%22%3A%22c504d684%22%2C%22pid%22%3A1%2C%22site%22%3A%22www%22%7D\n");
// String username = Config.getInstance().getSettings().username; webSocket.send("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");
// if(username != null && !username.trim().isEmpty()) {
// mfc.getHttpClient().login();
// Cookie passcode = mfc.getHttpClient().getCookie("passcode");
// webSocket.send("1 0 0 20080909 0 "+username+":"+passcode+"\n");
// } else {
webSocket.send("1 0 0 20080909 0 guest:guest\n");
// }
startKeepAlive(webSocket); startKeepAlive(webSocket);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@ -179,12 +177,8 @@ public class MyFreeCamsClient {
case NULL: case NULL:
break; break;
case LOGIN: case LOGIN:
// System.out.println("LOGIN"); LOG.debug("LOGIN: {}", message);
// System.out.println("Sender " + message.getSender()); sessionId = message.getReceiver();
// System.out.println("Receiver " + message.getReceiver());
// System.out.println("Arg1 " + message.getArg1());
// System.out.println("Arg2 " + message.getArg2());
// System.out.println("Msg " + message.getMessage());
break; break;
case DETAILS: case DETAILS:
case ROOMHELPER: case ROOMHELPER:
@ -205,7 +199,7 @@ public class MyFreeCamsClient {
SessionState sessionState = adapter.fromJson(message.getMessage()); SessionState sessionState = adapter.fromJson(message.getMessage());
updateSessionState(sessionState); updateSessionState(sessionState);
} catch (IOException e) { } catch (IOException e) {
LOG.error("Couldn't parse session state message", e); LOG.error("Couldn't parse session state message {}", message, e);
} }
} }
break; break;
@ -222,44 +216,46 @@ public class MyFreeCamsClient {
} }
break; break;
case EXTDATA: case EXTDATA:
// if(message.getReceiver() == 0) { if(message.getArg1() == MessageTypes.LOGIN) {
// String key = message.getMessage(); chatToken = message.getMessage();
// String username = Config.getInstance().getSettings().username; String username = Config.getInstance().getSettings().username;
// if(username != null && !username.trim().isEmpty()) { if(StringUtil.isNotBlank(username)) {
// boolean login = mfc.getHttpClient().login(); boolean login = mfc.getHttpClient().login();
// if(login) { if (login) {
// Cookie passcode = mfc.getHttpClient().getCookie("passcode"); Cookie passcode = mfc.getHttpClient().getCookie("passcode");
// System.out.println("1 0 0 20071025 0 "+key+"@1/"+username+":"+passcode+"\n"); webSocket.send("1 0 0 20071025 0 " + chatToken + "@1/" + username + ":" + passcode.value() + "\n");
// webSocket.send("1 0 0 20071025 0 "+key+"@1/"+username+":"+passcode+"\n"); } else {
// } else { LOG.error("Login failed");
// LOG.error("Login failed"); webSocket.send("1 0 0 20080909 0 guest:guest\n");
// } }
// } else { } else {
// webSocket.send("1 0 0 20080909 0 guest:guest\n"); webSocket.send("1 0 0 20080909 0 guest:guest\n");
// } }
// } } else if(message.getArg1() == MessageTypes.MANAGELIST) {
// System.out.println("EXTDATA"); requestExtData(message.getMessage());
// System.out.println("Sender " + message.getSender()); } else {
// System.out.println("Receiver " + message.getReceiver()); System.out.println("EXTDATA");
// System.out.println("Arg1 " + message.getArg1()); System.out.println(" Sender " + message.getSender());
// System.out.println("Arg2 " + message.getArg2()); System.out.println(" Receiver " + message.getReceiver());
// System.out.println("Msg " + message.getMessage()); System.out.println(" Arg1 " + message.getArg1());
requestExtData(message.getMessage()); System.out.println(" Arg2 " + message.getArg2());
System.out.println(" Msg " + message.getMessage());
}
break; break;
case ROOMDATA: case ROOMDATA:
System.out.println("ROOMDATA"); System.out.println("ROOMDATA");
System.out.println("Sender " + message.getSender()); System.out.println(" Sender " + message.getSender());
System.out.println("Receiver " + message.getReceiver()); System.out.println(" Receiver " + message.getReceiver());
System.out.println("Arg1 " + message.getArg1()); System.out.println(" Arg1 " + message.getArg1());
System.out.println("Arg2 " + message.getArg2()); System.out.println(" Arg2 " + message.getArg2());
System.out.println("Msg " + message.getMessage()); System.out.println(" Msg " + message.getMessage());
case UEOPT: case UEOPT:
System.out.println("UEOPT"); System.out.println("UEOPT");
System.out.println("Sender " + message.getSender()); System.out.println(" Sender " + message.getSender());
System.out.println("Receiver " + message.getReceiver()); System.out.println(" Receiver " + message.getReceiver());
System.out.println("Arg1 " + message.getArg1()); System.out.println(" Arg1 " + message.getArg1());
System.out.println("Arg2 " + message.getArg2()); System.out.println(" Arg2 " + message.getArg2());
System.out.println("Msg " + message.getMessage()); System.out.println(" Msg " + message.getMessage());
break; break;
case SLAVEVSHARE: case SLAVEVSHARE:
// LOG.debug("SLAVEVSHARE {}", message); // LOG.debug("SLAVEVSHARE {}", message);
@ -312,6 +308,7 @@ public class MyFreeCamsClient {
JSONObject object = new JSONObject(json); JSONObject object = new JSONObject(json);
if(object.has("type") && object.getInt("type") == 21) { if(object.has("type") && object.getInt("type") == 21) {
JSONArray outer = object.getJSONArray("rdata"); JSONArray outer = object.getJSONArray("rdata");
LOG.debug("{} models", outer.length());
for (int i = 1; i < outer.length(); i++) { for (int i = 1; i < outer.length(); i++) {
JSONArray inner = outer.getJSONArray(i); JSONArray inner = outer.getJSONArray(i);
try { try {
@ -436,6 +433,7 @@ public class MyFreeCamsClient {
fout.write(string.getBytes()); fout.write(string.getBytes());
fout.write(10); fout.write(10);
} }
//System.exit(1);
} catch (Exception e1) { } catch (Exception e1) {
LOG.error("Couldn't write mfc message history to " + logfile); LOG.error("Couldn't write mfc message history to " + logfile);
e1.printStackTrace(); e1.printStackTrace();
@ -462,6 +460,22 @@ public class MyFreeCamsClient {
return ws; return ws;
} }
protected boolean follow(int uid) {
if(ws != null) {
return ws.send(ADDFRIENDREQ + " " + sessionId + " 0 " + uid + " 1\n");
} else {
return false;
}
}
protected boolean unfollow(int uid) {
if(ws != null) {
return ws.send(ADDFRIENDREQ + " " + sessionId + " 0 " + uid + " 2\n");
} else {
return false;
}
}
private void startKeepAlive(WebSocket ws) { private void startKeepAlive(WebSocket ws) {
Thread keepAlive = new Thread(() -> { Thread keepAlive = new Thread(() -> {
while(running) { while(running) {
@ -535,6 +549,9 @@ public class MyFreeCamsClient {
JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class).indent(" "); JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class).indent(" ");
System.out.println(adapter.toJson(state)); System.out.println(adapter.toJson(state));
System.out.println(model.getPreview()); System.out.println(model.getPreview());
System.out.println("H5 " + serverConfig.isOnHtml5VideoServer(state));
System.out.println("NG " + serverConfig.isOnNgServer(state));
System.out.println("WZ " + serverConfig.isOnWzObsVideoServer(state));
System.out.println("#####################"); System.out.println("#####################");
} }
} }

View File

@ -271,12 +271,12 @@ public class MyFreeCamsModel extends AbstractModel {
@Override @Override
public boolean follow() { public boolean follow() {
return false; return site.getClient().follow(getUid());
} }
@Override @Override
public boolean unfollow() { public boolean unfollow() {
return false; return site.getClient().unfollow(getUid());
} }
public int getUid() { public int getUid() {