Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity SocketIO Client

A SocketIO client for Unity written in C#. It's compatible with the latest version of the SocketIO server for node.js (2.0.2) and should be compatible with any other version that leverages the same protocol spec.

Features

  • Send/Receive SocketIO events
  • Send/Receive event callbacks
  • Send/Receive binary data

Basic Usage

Importing the Namespace

Everything is contained within the namespace Dpoch.SocketIO

usingDpoch.SocketIO;

Connecting to a SocketIO Server

Client (C#)
varsocket=newSocketIO("ws://127.0.0.1:80/socket.io/?EIO=4&transport=websocket");socket.OnOpen+=()=>Debug.Log("Socket open!");socket.OnConnectFailed+=()=>Debug.Log("Socket failed to connect!");socket.OnClose+=()=>Debug.Log("Socket closed!");socket.OnError+=(err)=>Debug.Log("Socket Error: "+err);socket.Connect();

NOTE: The URL has to be the full SocketIO websocket url. The /socket.io/?EIO=4&transport=websocket part is required. Websockets are the only supported transport.

Sending/Receiving Events

Client (C#)
socket.OnOpen+=()=>{socket.Emit("client-handshake");Debug.Log("Sent client handshake");};socket.On("server-handshake",(ev)=>{Debug.Log("Received server handshake");});socket.Connect();
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",()=>{console.log("Received client handshake");socket.emit("server-handshake");console.log("Sent server handshake");});});

Sending/Receiving Events with Data

Sending Data

You can optionally send or receive data with your events. Any data you send from the client to the server will automatically get serialized into JSON. This library uses the popular JSON-library JSON.NET for JSON serialization. There are a number of ways you can specify the serialization behaviour for your Classes. For more information please consult the JSON.NET Documentation.

Client (C#)
socket.Emit("client-handshake","This string will get sent to the server");socket.Emit("multiple-args","You can also send multiple values","like so",42f);/* class MyCustomJsonClass{ public string myMember; } */varmyData=newMyCustomJsonClass(){myMember="This member will get serialized"};socket.Emit("json-object",myData);
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("client-handshake",(data)=>{console.log(data);// output: "This string will get sent to the server"});socket.on("multiple-args",(arg0,arg1,arg2)=>{console.log(arg0);//output: "You can also send multiple values"console.log(arg1);//output: "like so"console.log(arg2);//output: 42});socket.on("json-object",(data)=>{console.log(data.myMember);//output: "This member will get serialized"});});
Receiving Data

The Data property of the SocketIOEvent object that gets passed to the event handler is a JArray which is part of JSON.NET. It can be used like a normal Array. It contains JTokens and the elements correspond to the parameters that got passed to the server emit. You can use the JTokens to extract the data that you're interested in or simply parse it into an object. For more information please consult the JSON.NET Documentation.

Client (C#)
/* class MyCustomJsonClass{ public string myMember; }	*/socket.On("some-data",(ev)=>{stringmyString=ev.Data[0].ToObject<string>();floatmyNumber=ev.Data[1].ToObject<float>();MyCustomJsonClassmyJsonObj=ev.Data[2].ToObject<MyCustomJsonClass>();Debug.Log(myString);//output: "My string"Debug.Log(myNumber);//output: 42Debug.Log(myJsonObj.myMember);//output: "My member string"});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-data","My string",42,{myMember : "My member string"});});
Binary Data / Raw JSON

Any byte[] will not get serialized into JSON but sent as a binary attachment. This happens automatically so you don't have to worry about it. On the server the byte[] will be available as a JS Buffer. Conversely if you're sending a Buffer to the client it will be a byte[].

If you want to send a raw JSON string as JSON data you can use the JRaw Class which is part of the Newtonsoft.Json.Linq namespace. For more information please consult the JSON.NET Documentation.

Sending/Receiving Event Callbacks

Sometimes you might want to send or receive an acknowlegement that the client or server received/processed an event. These acknowledgements are part of the SocketIO spec and you can handle them with this library. Note that events can only be acknowledged once and that it won't work with broadcasts. To check whether you can acknowledge an event you can use the IsAcknowledgable property of the SocketIOEvent object.

Sending Acknowledgements
Client (C#)
socket.On("some-event",(ev)=>{Debug.Log(ev.Data[0].ToObject<string>());//output: "optional event data"if(ev.IsAcknowledgable)ev.Acknowledge("optional acknowledgement data");});
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.emit("some-event","optional event data",(ackData)=>{console.log(ackData);//output: "optional acknowledgement data"console.log("some-event acknowledged");});});
Receiving Acknowledgements
Client (C#)
socket.Emit("some-event",(JArrayackData)=>{console.log(ackData[0].ToObject<string>());//output: "optional acknowlegdement data"Debug.Log("some-event acknowledged");},"optional event data");
Server (JavaScript)
//socket.io server boilerplateio.on("connection",(socket)=>{socket.on("some-event",(arg0,acknowledge)=>{console.log(arg0);//output: "optional event data"acknowledge("optional acknowledgement data");});});

About

No description, website, or topics provided.

Resources

Stars

30 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages