问题描述
我正在为 shapez.io、多人游戏制作一个模组,但我在使用 webRTC 时遇到了一些问题。
当我在本地运行两个客户端时,它们可以通过外部信令服务器进行连接。因此他们可以通过数据通道进行通话。
我正在使用来自他们未连接的不同网络的客户端。没有错误,但是报价和答案是通过信令服务器发送的。
我不太了解 webRTC,所以希望有人能帮助我。
当前的 github 代码在线于 https://thomasbrants.nl/shapez.io-multiplayer/。
转到多人游戏 -> 新游戏或继续游戏 -> 输入 from tkinter import *
tkinter.messageBox.showinfo("Hello ")
-> 你会得到一个 uuid
打开一个新客户端->多人游戏->加入->输入wss://thomasbrants.nl:8888
->输入uuid
Github:https://github.com/DJ1TJOO/shapez.io/tree/multiplayer
此代码生成一个 uuid,用户可以共享它。它连接到信令服务器并使用 uuid 创建一个房间。然后当 createPeer 被调用时,它会尝试连接到一个对等点。
wss://thomasbrants.nl:8888
这里放入uuid,然后连接到信令服务器。并尝试建立连接。
this.connectionId = uuidv4();
// @ts-ignore
var socket = io(this.host,{ transport: ["websocket"] });
var socketId = undefined;
var connections = [];
socket.on("connect",() => {
socket.on("id",id => {
socketId = id;
});
socket.emit("createRoom",this.connectionId);
//Create peer
socket.on("createPeer",async data => {
const config = {
iceServers: [{
urls: "stun:stun.1.google.com:19302",},],};
const pc = new RTCPeerConnection(config);
const dc = pc.createDataChannel("game",{
negotiated: true,id: 0,});
//Create offer
await pc.setLocalDescription(await pc.createOffer());
pc.onicecandidate = ({ candidate }) => {
if (candidate || pc.signalingState === "stable") return;
console.log("Offer send");
console.log(pc.signalingState);
console.log(pc.getStats);
socket.emit("offer",{
offer: pc.localDescription.sdp,socketIdReceiver: socketId,socketIdSender: data.socketIdSender,room: data.room,});
};
//Answer
socket.on("answer",data => {
if (data.socketIdReceiver !== socketId || pc.signalingState === "stable") return;
pc.setRemoteDescription({
type: "answer",sdp: data.answer,});
console.log("Answer received");
console.log(pc.signalingState);
console.log(pc.getStats());
var onopen = event => {
//not empty but not related
};
var onMessage = ev => {
//not empty but not related
};
dc.onopen = onopen;
dc.onmessage = onMessage;
onopen();
pc.ondatachannel = event => {
let receiveChannel = event.channel;
receiveChannel.onmessage = onMessage;
receiveChannel.onopen = onopen;
};
connections.push({ pc: pc,dc: dc });
});
});
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)