Functional for client
This commit is contained in:
parent
f49e79cf42
commit
038ae4d325
8 changed files with 15924 additions and 15891 deletions
31673
javascript/classes.js
31673
javascript/classes.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -70,11 +70,11 @@ window.initializeVoiceClient = (() => {
|
|||
}
|
||||
|
||||
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
|
||||
if(evt.connectionState === 'disconnected') {
|
||||
if(self.peerConnection.connectionState === 'disconnected') {
|
||||
self.client.signalDisconnect(self.peerId);
|
||||
} else if (evt.connectionState === 'connected') {
|
||||
} else if (self.peerConnection.connectionState === 'connected') {
|
||||
if (self.client.peerState != PEERSTATE_SUCCESS) self.client.peerState = PEERSTATE_SUCCESS;
|
||||
} else if (evt.connectionState === 'failed') {
|
||||
} else if (self.peerConnection.connectionState === 'failed') {
|
||||
if (self.client.peerState == PEERSTATE_LOADING) self.client.peerState = PEERSTATE_FAILED;
|
||||
self.client.signalDisconnect(self.peerId);
|
||||
}
|
||||
|
@ -392,26 +392,41 @@ window.initializeLANClient = (() => {
|
|||
}
|
||||
|
||||
sendPacketToServer(buffer) {
|
||||
this.dataChannel.send(buffer);
|
||||
if(this.dataChannel.readyState == "open") {
|
||||
this.dataChannel.send(buffer);
|
||||
}else {
|
||||
this.signalRemoteDisconnect(false);
|
||||
}
|
||||
}
|
||||
|
||||
signalRemoteConnect() {
|
||||
const self = this;
|
||||
|
||||
const iceCandidates = [];
|
||||
|
||||
this.peerConnection.addEventListener("icecandidate", (evt) => {
|
||||
if(evt.candidate) {
|
||||
self.iceCandidateHandler(JSON.stringify({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate }));
|
||||
if(iceCandidates.length == 0) setTimeout(() => {
|
||||
if(self.peerConnection != null && self.peerConnection.connectionState != "disconnected") {
|
||||
self.iceCandidateHandler(JSON.stringify(iceCandidates));
|
||||
iceCandidates.length = 0;
|
||||
}
|
||||
}, 1500);
|
||||
iceCandidates.push({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate });
|
||||
}
|
||||
});
|
||||
|
||||
this.channel = this.peerConnection.createDataChannel("lan");
|
||||
this.dataChannel = this.peerConnection.createDataChannel("lan");
|
||||
this.dataChannel.binaryType = "arraybuffer";
|
||||
|
||||
this.channel.addEventListener("open", (evt) => {
|
||||
self.remoteDataChannelHandler(self.channel);
|
||||
this.dataChannel.addEventListener("open", async (evt) => {
|
||||
while(iceCandidates.length > 0) {
|
||||
await new Promise(resolve => setTimeout(resolve, 0));
|
||||
}
|
||||
self.remoteDataChannelHandler(self.dataChannel);
|
||||
});
|
||||
|
||||
this.channel.addEventListener("message", (evt) => {
|
||||
console.log(evt.data);
|
||||
this.dataChannel.addEventListener("message", (evt) => {
|
||||
self.remotePacketHandler(evt.data);
|
||||
}, false);
|
||||
|
||||
|
@ -422,22 +437,22 @@ window.initializeLANClient = (() => {
|
|||
}, (err) => {
|
||||
console.error("Failed to set local description! " + err);
|
||||
self.readyState = READYSTATE_FAILED;
|
||||
self.signalRemoteDisconnect();
|
||||
self.signalRemoteDisconnect(false);
|
||||
});
|
||||
}, (err) => {
|
||||
console.error("Failed to set create offer! " + err);
|
||||
self.readyState = READYSTATE_FAILED;
|
||||
self.signalRemoteDisconnect();
|
||||
self.signalRemoteDisconnect(false);
|
||||
});
|
||||
|
||||
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
|
||||
if(evt.connectionState === 'disconnected') {
|
||||
self.signalRemoteDisconnect();
|
||||
} else if (evt.connectionState === 'connected') {
|
||||
if(self.peerConnection.connectionState === 'disconnected') {
|
||||
self.signalRemoteDisconnect(false);
|
||||
} else if (self.peerConnection.connectionState === 'connected') {
|
||||
self.readyState = READYSTATE_CONNECTED;
|
||||
} else if (evt.connectionState === 'failed') {
|
||||
} else if (self.peerConnection.connectionState === 'failed') {
|
||||
self.readyState = READYSTATE_FAILED;
|
||||
self.signalRemoteDisconnect();
|
||||
self.signalRemoteDisconnect(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -448,21 +463,24 @@ window.initializeLANClient = (() => {
|
|||
} catch (e) {
|
||||
console.error(e);
|
||||
this.readyState = READYSTATE_FAILED;
|
||||
this.signalRemoteDisconnect();
|
||||
this.signalRemoteDisconnect(false);
|
||||
}
|
||||
}
|
||||
|
||||
signalRemoteICECandidate(candidate) {
|
||||
signalRemoteICECandidate(candidates) {
|
||||
try {
|
||||
this.peerConnection.addIceCandidate(JSON.parse(candidate));
|
||||
const candidateList = JSON.parse(candidates);
|
||||
for (let candidate of candidateList) {
|
||||
this.peerConnection.addIceCandidate(candidate);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
this.readyState = READYSTATE_FAILED;
|
||||
this.signalRemoteDisconnect();
|
||||
this.signalRemoteDisconnect(false);
|
||||
}
|
||||
}
|
||||
|
||||
signalRemoteDisconnect() {
|
||||
signalRemoteDisconnect(quiet) {
|
||||
if(this.dataChannel != null) {
|
||||
this.dataChannel.close();
|
||||
this.dataChannel = null;
|
||||
|
@ -470,7 +488,7 @@ window.initializeLANClient = (() => {
|
|||
if(this.peerConnection != null) {
|
||||
this.peerConnection.close();
|
||||
}
|
||||
this.remoteDisconnectHandler();
|
||||
if(!quiet) this.remoteDisconnectHandler();
|
||||
this.readyState = READYSTATE_DISCONNECTED;
|
||||
}
|
||||
|
||||
|
@ -505,27 +523,38 @@ window.initializeLANServer = (() => {
|
|||
this.dataChannel = null;
|
||||
|
||||
const self = this;
|
||||
|
||||
const iceCandidates = [];
|
||||
|
||||
this.peerConnection.addEventListener("icecandidate", (evt) => {
|
||||
if(evt.candidate) {
|
||||
self.client.iceCandidateHandler(self.peerId, JSON.stringify({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate }));
|
||||
if(iceCandidates.length == 0) setTimeout(() => {
|
||||
if(self.peerConnection != null && self.peerConnection.connectionState != "disconnected") {
|
||||
self.client.iceCandidateHandler(self.peerId, JSON.stringify(iceCandidates));
|
||||
iceCandidates.length = 0;
|
||||
}
|
||||
}, 1500);
|
||||
iceCandidates.push({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate });
|
||||
}
|
||||
});
|
||||
|
||||
this.peerConnection.addEventListener("datachannel", (evt) => {
|
||||
this.peerConnection.addEventListener("datachannel", async (evt) => {
|
||||
while(iceCandidates.length > 0) {
|
||||
await new Promise(resolve => setTimeout(resolve, 0));
|
||||
}
|
||||
self.dataChannel = evt.channel;
|
||||
self.client.remoteClientDataChannelHandler(self.peerId, self.dataChannel);
|
||||
self.dataChannel.addEventListener("message", (evt) => {
|
||||
console.log(evt.data);
|
||||
self.client.remoteClientPacketHandler(self.peerId, evt.data);
|
||||
}, false);
|
||||
});
|
||||
}, false);
|
||||
|
||||
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
|
||||
if(evt.connectionState === 'disconnected') {
|
||||
if(self.peerConnection.connectionState === 'disconnected') {
|
||||
self.client.signalRemoteDisconnect(self.peerId);
|
||||
} else if (evt.connectionState === 'connected') {
|
||||
} else if (self.peerConnection.connectionState === 'connected') {
|
||||
if (self.client.peerState != PEERSTATE_SUCCESS) self.client.peerState = PEERSTATE_SUCCESS;
|
||||
} else if (evt.connectionState === 'failed') {
|
||||
} else if (self.peerConnection.connectionState === 'failed') {
|
||||
if (self.client.peerState == PEERSTATE_LOADING) self.client.peerState = PEERSTATE_FAILED;
|
||||
self.client.signalRemoteDisconnect(self.peerId);
|
||||
}
|
||||
|
@ -575,9 +604,12 @@ window.initializeLANServer = (() => {
|
|||
}
|
||||
}
|
||||
|
||||
addICECandidate(candidate) {
|
||||
addICECandidate(candidates) {
|
||||
try {
|
||||
this.peerConnection.addIceCandidate(new RTCIceCandidate(JSON.parse(candidate)));
|
||||
const candidateList = JSON.parse(candidates);
|
||||
for (let candidate of candidateList) {
|
||||
this.peerConnection.addIceCandidate(new RTCIceCandidate(candidate));
|
||||
}
|
||||
if (this.client.peerStateIce != PEERSTATE_SUCCESS) this.client.peerStateIce = PEERSTATE_SUCCESS;
|
||||
} catch (err) {
|
||||
console.error("Failed to parse ice candidate for \"" + this.peerId + "\"! " + err);
|
||||
|
@ -649,8 +681,11 @@ window.initializeLANServer = (() => {
|
|||
sendPacketToRemoteClient(peerId, buffer) {
|
||||
var thePeer = this.peerList.get(peerId);
|
||||
if((typeof thePeer !== "undefined") && thePeer !== null) {
|
||||
console.log(123);
|
||||
thePeer.dataChannel.send(buffer);
|
||||
if(thePeer.dataChannel.readyState == "open") {
|
||||
thePeer.dataChannel.send(buffer);
|
||||
}else {
|
||||
this.signalRemoteDisconnect(peerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,7 @@ public class GuiScreenLANConnecting extends GuiScreen {
|
|||
try {
|
||||
netHandler = new NetClientHandler(mc, netMgr);
|
||||
this.mc.setNetManager(netMgr);
|
||||
netMgr.setNetHandler(netHandler);
|
||||
netHandler.addToSendQueue(new Packet2ClientProtocol(61, EaglerProfile.username, "127.0.0.1", mc.gameSettings.renderDistance));
|
||||
} catch (IOException e) {
|
||||
this.mc.displayGuiScreen(new GuiDisconnected(parent, "connect.failed", "disconnect.genericReason", "could not create nethandler", ""));
|
||||
|
|
|
@ -293,24 +293,20 @@ public class IntegratedServerLAN {
|
|||
protected void update() {
|
||||
if(state == CONNECTED) {
|
||||
LANPeerEvent evt;
|
||||
while((evt = EaglerAdapter.serverLANGetEvent(clientId)) != null) {
|
||||
if(state == CONNECTED) {
|
||||
if(evt instanceof LANPeerEvent.LANPeerPacketEvent) {
|
||||
EaglerAdapter.sendToIntegratedServer(clientId, ((LANPeerEvent.LANPeerPacketEvent)evt).payload);
|
||||
}else if(evt instanceof LANPeerEvent.LANPeerDisconnectEvent) {
|
||||
System.err.println("LAN client '" + clientId + "' disconnected");
|
||||
disconnect();
|
||||
}else {
|
||||
System.err.println("LAN client '" + clientId + "' had an accident: " + evt.getClass().getSimpleName());
|
||||
disconnect();
|
||||
}
|
||||
while(state == CONNECTED && (evt = EaglerAdapter.serverLANGetEvent(clientId)) != null) {
|
||||
if(evt instanceof LANPeerEvent.LANPeerPacketEvent) {
|
||||
EaglerAdapter.sendToIntegratedServer("NET|" + clientId, ((LANPeerEvent.LANPeerPacketEvent)evt).payload);
|
||||
}else if(evt instanceof LANPeerEvent.LANPeerDisconnectEvent) {
|
||||
System.err.println("LAN client '" + clientId + "' disconnected");
|
||||
disconnect();
|
||||
}else {
|
||||
System.err.println("LAN client '" + clientId + "' had an accident: " + evt.getClass().getSimpleName());
|
||||
disconnect();
|
||||
}
|
||||
}
|
||||
if(state == CONNECTED) {
|
||||
PKT pk;
|
||||
while((pk = EaglerAdapter.recieveFromIntegratedServer("NET|" + clientId)) != null) {
|
||||
EaglerAdapter.serverLANWritePacket(clientId, pk.data);
|
||||
}
|
||||
PKT pk;
|
||||
while(state == CONNECTED && (pk = EaglerAdapter.recieveFromIntegratedServer("NET|" + clientId)) != null) {
|
||||
EaglerAdapter.serverLANWritePacket(clientId, pk.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -251,7 +251,7 @@ public class LANClientNetworkManager implements INetworkManager {
|
|||
* message, just a vague stack trace. But making a multi-catch around just
|
||||
* readPacketData and processPacket has no issues
|
||||
*
|
||||
* You'e welcome for the two hours of my time and single line changes I made
|
||||
* You're welcome for the two hours of my time and single line changes I made
|
||||
* in a fuck ton of irrelevant files leading up to this bullshit revelation
|
||||
*/
|
||||
|
||||
|
|
|
@ -3718,7 +3718,7 @@ public class EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void clientLANCloseConnection() {
|
||||
rtcLANClient.signalRemoteDisconnect();
|
||||
rtcLANClient.signalRemoteDisconnect(false);
|
||||
}
|
||||
|
||||
public static final void clientLANSendPacket(byte[] pkt) {
|
||||
|
@ -3770,7 +3770,7 @@ public class EaglerAdapterImpl2 {
|
|||
}
|
||||
rtcLANClient.setICEServers(servers);
|
||||
if(clientLANReadyState() == rtcLANClient.READYSTATE_CONNECTED || clientLANReadyState() == rtcLANClient.READYSTATE_CONNECTING) {
|
||||
rtcLANClient.signalRemoteDisconnect();
|
||||
rtcLANClient.signalRemoteDisconnect(true);
|
||||
}
|
||||
rtcLANClient.initializeClient();
|
||||
rtcLANClient.signalRemoteConnect();
|
||||
|
|
|
@ -38,7 +38,7 @@ public interface EaglercraftLANClient extends JSObject {
|
|||
|
||||
void signalRemoteICECandidate(String candidate);
|
||||
|
||||
void signalRemoteDisconnect();
|
||||
void signalRemoteDisconnect(boolean quiet);
|
||||
|
||||
@JSFunctor
|
||||
public static interface ICECandidateHandler extends JSObject {
|
||||
|
|
Loading…
Reference in a new issue