我正在尝试将Revit与服务器nodejs本地主机连接,但是当我从服务器向所有客户端发射数据时,在Revit中什么也没有发生,并且控制台可见的Revit连接和断开了连续性Web服务器nodejs。
服务器本地主机上的代码:
io2.on('connection', function(client){
console.log(client.id+" connected");
client.on("disconnect",function(){
console.log(client.id + " disconnected !");
})
var obj = null;
client.on("send-data", function(data){
console.log(data);
obj = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
};
io2.sockets.emit("send-data-from-server", obj);
})
});
app.get("/", function(req, res){
res.render("index");
});
image Revit connected and disconnected continuity web server nodejs here
使用Revit进行代码测试
namespace TF{
[Transaction(TransactionMode.Manual)]
public class ForgeTestCmd : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
var options = new IO.Options()
{
IgnoreServerCertificateValidation = true,
AutoConnect = true,
ForceNew = true
};
const string _url = "http://localhost:3000";
Quobject.SocketIoClientDotNet.Client.Socket _socket = IO.Socket(_url, options);
_socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT, () => { });
_socket.On("send-data-from-server", data
=>
{
MessageBox.Show(data.ToString(), "connect");
});
return Result.Succeeded;
}
}
}
我不知道为什么Revit无法监听服务器发出的事件。我也不知道Revit监听服务器的条件。
感谢进阶!
答案 0 :(得分:0)
似乎您正在尝试从Revit外部启动ForgeTestCmd
。
那不可能。
Revit API完全由事件驱动,事件由Revit本身引发,而没有其他人引发。
对于外部命令,Execute
事件通常是由用户单击Revit用户界面中的相应按钮触发的。
您可以使用external event来解决此限制。
请更深入地研究External Events for Modeless Access and Driving Revit from Outside上的《 Building Coder》文章。