mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-02 22:37:32 +00:00
337 lines
7.5 KiB
JavaScript
337 lines
7.5 KiB
JavaScript
//event related nodes
|
|
(function(global){
|
|
var LiteGraph = global.LiteGraph;
|
|
|
|
function LGWebSocket()
|
|
{
|
|
this.size = [60,20];
|
|
this.addInput("send", LiteGraph.ACTION);
|
|
this.addOutput("received", LiteGraph.EVENT);
|
|
this.addInput("in", 0 );
|
|
this.addOutput("out", 0 );
|
|
this.properties = {
|
|
url: "",
|
|
room: "lgraph", //allows to filter messages,
|
|
only_send_changes: true
|
|
};
|
|
this._ws = null;
|
|
this._last_sent_data = [];
|
|
this._last_received_data = [];
|
|
}
|
|
|
|
LGWebSocket.title = "WebSocket";
|
|
LGWebSocket.desc = "Send data through a websocket";
|
|
|
|
LGWebSocket.prototype.onPropertyChanged = function(name,value)
|
|
{
|
|
if(name == "url")
|
|
this.connectSocket();
|
|
}
|
|
|
|
LGWebSocket.prototype.onExecute = function()
|
|
{
|
|
if(!this._ws && this.properties.url)
|
|
this.connectSocket();
|
|
|
|
if(!this._ws || this._ws.readyState != WebSocket.OPEN )
|
|
return;
|
|
|
|
var room = this.properties.room;
|
|
var only_changes = this.properties.only_send_changes;
|
|
|
|
for(var i = 1; i < this.inputs.length; ++i)
|
|
{
|
|
var data = this.getInputData(i);
|
|
if(data == null)
|
|
continue;
|
|
var json;
|
|
try
|
|
{
|
|
json = JSON.stringify({ type: 0, room: room, channel: i, data: data });
|
|
}
|
|
catch (err)
|
|
{
|
|
continue;
|
|
}
|
|
if( only_changes && this._last_sent_data[i] == json )
|
|
continue;
|
|
|
|
this._last_sent_data[i] = json;
|
|
this._ws.send( json );
|
|
}
|
|
|
|
for(var i = 1; i < this.outputs.length; ++i)
|
|
this.setOutputData( i, this._last_received_data[i] );
|
|
|
|
if( this.boxcolor == "#AFA" )
|
|
this.boxcolor = "#6C6";
|
|
}
|
|
|
|
LGWebSocket.prototype.connectSocket = function()
|
|
{
|
|
var that = this;
|
|
var url = this.properties.url;
|
|
if( url.substr(0,2) != "ws" )
|
|
url = "ws://" + url;
|
|
this._ws = new WebSocket( url );
|
|
this._ws.onopen = function()
|
|
{
|
|
console.log("ready");
|
|
that.boxcolor = "#6C6";
|
|
}
|
|
this._ws.onmessage = function(e)
|
|
{
|
|
that.boxcolor = "#AFA";
|
|
var data = JSON.parse( e.data );
|
|
if( data.room && data.room != this.properties.room )
|
|
return;
|
|
if( e.data.type == 1 )
|
|
{
|
|
if(data.data.object_class && LiteGraph[data.data.object_class] )
|
|
{
|
|
var obj = null;
|
|
try
|
|
{
|
|
obj = new LiteGraph[data.data.object_class](data.data);
|
|
that.triggerSlot( 0, obj );
|
|
}
|
|
catch (err)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
that.triggerSlot( 0, data.data );
|
|
}
|
|
else
|
|
that._last_received_data[ e.data.channel || 0 ] = data.data;
|
|
}
|
|
this._ws.onerror = function(e)
|
|
{
|
|
console.log("couldnt connect to websocket");
|
|
that.boxcolor = "#E88";
|
|
}
|
|
this._ws.onclose = function(e)
|
|
{
|
|
console.log("connection closed");
|
|
that.boxcolor = "#000";
|
|
}
|
|
}
|
|
|
|
LGWebSocket.prototype.send = function(data)
|
|
{
|
|
if(!this._ws || this._ws.readyState != WebSocket.OPEN )
|
|
return;
|
|
this._ws.send( JSON.stringify({ type:1, msg: data }) );
|
|
}
|
|
|
|
LGWebSocket.prototype.onAction = function( action, param )
|
|
{
|
|
if(!this._ws || this._ws.readyState != WebSocket.OPEN )
|
|
return;
|
|
this._ws.send( { type: 1, room: this.properties.room, action: action, data: param } );
|
|
}
|
|
|
|
LGWebSocket.prototype.onGetInputs = function()
|
|
{
|
|
return [["in",0]];
|
|
}
|
|
|
|
LGWebSocket.prototype.onGetOutputs = function()
|
|
{
|
|
return [["out",0]];
|
|
}
|
|
|
|
LiteGraph.registerNodeType("network/websocket", LGWebSocket );
|
|
|
|
|
|
//It is like a websocket but using the SillyServer.js server that bounces packets back to all clients connected:
|
|
//For more information: https://github.com/jagenjo/SillyServer.js
|
|
|
|
function LGSillyClient()
|
|
{
|
|
//this.size = [60,20];
|
|
this.room_widget = this.addWidget("text","Room","lgraph",this.setRoom.bind(this));
|
|
this.addWidget("button","Reconnect",null,this.connectSocket.bind(this));
|
|
|
|
this.addInput("send", LiteGraph.ACTION);
|
|
this.addOutput("received", LiteGraph.EVENT);
|
|
this.addInput("in", 0 );
|
|
this.addOutput("out", 0 );
|
|
this.properties = {
|
|
url: "tamats.com:55000",
|
|
room: "lgraph",
|
|
only_send_changes: true
|
|
};
|
|
|
|
this._server = null;
|
|
this.connectSocket();
|
|
this._last_sent_data = [];
|
|
this._last_received_data = [];
|
|
|
|
}
|
|
|
|
LGSillyClient.title = "SillyClient";
|
|
LGSillyClient.desc = "Connects to SillyServer to broadcast messages";
|
|
|
|
LGSillyClient.prototype.onPropertyChanged = function(name,value)
|
|
{
|
|
if(name == "room")
|
|
this.room_widget.value = value;
|
|
this.connectSocket();
|
|
}
|
|
|
|
LGSillyClient.prototype.setRoom = function(room_name)
|
|
{
|
|
this.properties.room = room_name;
|
|
this.room_widget.value = room_name;
|
|
this.connectSocket();
|
|
}
|
|
|
|
//force label names
|
|
LGSillyClient.prototype.onDrawForeground = function()
|
|
{
|
|
for(var i = 1; i < this.inputs.length; ++i)
|
|
{
|
|
var slot = this.inputs[i];
|
|
slot.label = "in_" + i;
|
|
}
|
|
for(var i = 1; i < this.outputs.length; ++i)
|
|
{
|
|
var slot = this.outputs[i];
|
|
slot.label = "out_" + i;
|
|
}
|
|
}
|
|
|
|
LGSillyClient.prototype.onExecute = function()
|
|
{
|
|
if(!this._server || !this._server.is_connected)
|
|
return;
|
|
|
|
var only_send_changes = this.properties.only_send_changes;
|
|
|
|
for(var i = 1; i < this.inputs.length; ++i)
|
|
{
|
|
var data = this.getInputData(i);
|
|
if(data != null)
|
|
{
|
|
if( only_send_changes && this._last_sent_data[i] == data )
|
|
continue;
|
|
this._server.sendMessage( { type: 0, channel: i, data: data } );
|
|
this._last_sent_data[i] = data;
|
|
}
|
|
}
|
|
|
|
for(var i = 1; i < this.outputs.length; ++i)
|
|
this.setOutputData( i, this._last_received_data[i] );
|
|
|
|
if( this.boxcolor == "#AFA" )
|
|
this.boxcolor = "#6C6";
|
|
}
|
|
|
|
LGSillyClient.prototype.connectSocket = function()
|
|
{
|
|
var that = this;
|
|
if(typeof(SillyClient) == "undefined")
|
|
{
|
|
if(!this._error)
|
|
console.error("SillyClient node cannot be used, you must include SillyServer.js");
|
|
this._error = true;
|
|
return;
|
|
}
|
|
|
|
this._server = new SillyClient();
|
|
this._server.on_ready = function()
|
|
{
|
|
console.log("ready");
|
|
that.boxcolor = "#6C6";
|
|
}
|
|
this._server.on_message = function(id,msg)
|
|
{
|
|
var data = null;
|
|
try
|
|
{
|
|
data = JSON.parse( msg );
|
|
}
|
|
catch (err)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(data.type == 1) //EVENT slot
|
|
{
|
|
if(data.data.object_class && LiteGraph[data.data.object_class] )
|
|
{
|
|
var obj = null;
|
|
try
|
|
{
|
|
obj = new LiteGraph[data.data.object_class](data.data);
|
|
that.triggerSlot( 0, obj );
|
|
}
|
|
catch (err)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
that.triggerSlot( 0, data.data );
|
|
}
|
|
else //for FLOW slots
|
|
that._last_received_data[ data.channel || 0 ] = data.data;
|
|
that.boxcolor = "#AFA";
|
|
}
|
|
this._server.on_error = function(e)
|
|
{
|
|
console.log("couldnt connect to websocket");
|
|
that.boxcolor = "#E88";
|
|
}
|
|
this._server.on_close = function(e)
|
|
{
|
|
console.log("connection closed");
|
|
that.boxcolor = "#000";
|
|
}
|
|
|
|
if(this.properties.url && this.properties.room)
|
|
{
|
|
try
|
|
{
|
|
this._server.connect( this.properties.url, this.properties.room );
|
|
}
|
|
catch (err)
|
|
{
|
|
console.error("SillyServer error: " + err );
|
|
this._server = null;
|
|
return;
|
|
}
|
|
this._final_url = (this.properties.url + "/" + this.properties.room);
|
|
}
|
|
}
|
|
|
|
LGSillyClient.prototype.send = function(data)
|
|
{
|
|
if(!this._server || !this._server.is_connected)
|
|
return;
|
|
this._server.sendMessage( { type:1, data: data } );
|
|
}
|
|
|
|
LGSillyClient.prototype.onAction = function( action, param )
|
|
{
|
|
if(!this._server || !this._server.is_connected)
|
|
return;
|
|
this._server.sendMessage( { type: 1, action: action, data: param } );
|
|
}
|
|
|
|
LGSillyClient.prototype.onGetInputs = function()
|
|
{
|
|
return [["in",0]];
|
|
}
|
|
|
|
LGSillyClient.prototype.onGetOutputs = function()
|
|
{
|
|
return [["out",0]];
|
|
}
|
|
|
|
LiteGraph.registerNodeType("network/sillyclient", LGSillyClient );
|
|
|
|
|
|
})(this); |