Skip to content

Commit 6a78fdd

Browse files
committed
make NativeWebSocket 'universal' across Unity, Godot, MonoGame, and .NET
1 parent e51e38a commit 6a78fdd

63 files changed

Lines changed: 3097 additions & 3688 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
name: Unity UPM Release
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
branches:
9+
- master
10+
11+
jobs:
12+
checkSemver:
13+
name: Check for Semver Change
14+
runs-on: ubuntu-latest
15+
outputs:
16+
semver-updated: ${{ steps.check.outputs.changed }}
17+
steps:
18+
- name: Checkout Code
19+
uses: actions/checkout@v4
20+
- uses: EndBug/version-check@v1
21+
id: check
22+
with:
23+
file-name: integrations/Unity/package.json
24+
diff-search: true
25+
token: ${{ secrets.GITHUB_TOKEN }}
26+
- name: Log when changed
27+
if: steps.check.outputs.changed == 'true'
28+
run: 'echo "Version change found in commit ${{ steps.check.outputs.commit }}! New version: ${{ steps.check.outputs.version }} (${{ steps.check.outputs.type }})"'
29+
30+
updateUPM:
31+
name: Update UPM branch
32+
runs-on: ubuntu-latest
33+
needs: [checkSemver]
34+
if: needs.checkSemver.outputs.semver-updated == 'true'
35+
steps:
36+
- uses: actions/checkout@v4
37+
38+
- name: Assemble UPM package
39+
run: |
40+
mkdir -p upm-package/WebSocket
41+
42+
# Core library files (single source of truth)
43+
cp src/NativeWebSocket/IWebSocket.cs upm-package/WebSocket/
44+
cp src/NativeWebSocket/WebSocketTypes.cs upm-package/WebSocket/
45+
46+
# Unity-specific files (WebSocket.cs has #if !UNITY_WEBGL guard,
47+
# WebSocketWebGL.cs + WebSocketFactoryWebGL.cs have #if UNITY_WEBGL guard)
48+
cp integrations/Unity/WebSocket.cs upm-package/WebSocket/
49+
cp integrations/Unity/WebSocketWebGL.cs upm-package/WebSocket/
50+
cp integrations/Unity/WebSocketFactoryWebGL.cs upm-package/WebSocket/
51+
cp integrations/Unity/WebSocket.jslib upm-package/WebSocket/
52+
cp integrations/Unity/WebSocket.jspre upm-package/WebSocket/
53+
cp integrations/Unity/endel.nativewebsocket.asmdef upm-package/WebSocket/
54+
55+
# Package metadata and samples
56+
cp integrations/Unity/package.json upm-package/
57+
cp -r integrations/Unity/Samples~ upm-package/
58+
59+
- name: Push package directory to subtree
60+
uses: s0/git-publish-subdir-action@develop
61+
env:
62+
REPO: self
63+
BRANCH: upm-2.0
64+
FOLDER: upm-package/
65+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66+
67+
createPackage:
68+
name: Create Unity Package and Release
69+
runs-on: ubuntu-latest
70+
needs: [checkSemver]
71+
if: needs.checkSemver.outputs.semver-updated == 'true'
72+
steps:
73+
- name: Checkout Code
74+
uses: actions/checkout@v4
75+
76+
- name: Assemble package directory
77+
run: |
78+
mkdir -p upm-package/WebSocket
79+
80+
# Core library files
81+
cp src/NativeWebSocket/IWebSocket.cs upm-package/WebSocket/
82+
cp src/NativeWebSocket/WebSocketTypes.cs upm-package/WebSocket/
83+
84+
# Unity-specific files
85+
cp integrations/Unity/WebSocket.cs upm-package/WebSocket/
86+
cp integrations/Unity/WebSocketWebGL.cs upm-package/WebSocket/
87+
cp integrations/Unity/WebSocketFactoryWebGL.cs upm-package/WebSocket/
88+
cp integrations/Unity/WebSocket.jslib upm-package/WebSocket/
89+
cp integrations/Unity/WebSocket.jspre upm-package/WebSocket/
90+
cp integrations/Unity/endel.nativewebsocket.asmdef upm-package/WebSocket/
91+
92+
# Package metadata
93+
cp integrations/Unity/package.json upm-package/
94+
95+
- name: Generate .meta files
96+
run: |
97+
generate_meta() {
98+
local file="$1"
99+
local guid
100+
guid=$(echo -n "$file" | md5sum | cut -c1-32)
101+
local ext="${file##*.}"
102+
local meta="${file}.meta"
103+
104+
case "$ext" in
105+
cs)
106+
cat > "$meta" <<EOF
107+
fileFormatVersion: 2
108+
guid: ${guid}
109+
MonoImporter:
110+
serializedVersion: 2
111+
defaultReferences: []
112+
executionOrder: 0
113+
icon: {instanceID: 0}
114+
EOF
115+
;;
116+
jslib|jspre)
117+
cat > "$meta" <<EOF
118+
fileFormatVersion: 2
119+
guid: ${guid}
120+
PluginImporter:
121+
serializedVersion: 2
122+
iconMap: {}
123+
executionOrder: {}
124+
defineConstraints: []
125+
isPreloaded: 0
126+
isOverridable: 0
127+
isExplicitlyReferenced: 0
128+
validateReferences: 1
129+
platformData:
130+
- first:
131+
Any:
132+
second:
133+
enabled: 1
134+
settings: {}
135+
userData:
136+
assetBundleName:
137+
assetBundleVariant:
138+
EOF
139+
;;
140+
*)
141+
cat > "$meta" <<EOF
142+
fileFormatVersion: 2
143+
guid: ${guid}
144+
DefaultImporter:
145+
externalObjects: {}
146+
userData:
147+
assetBundleName:
148+
assetBundleVariant:
149+
EOF
150+
;;
151+
esac
152+
}
153+
154+
# Generate .meta for the WebSocket folder
155+
folder_guid=$(echo -n "upm-package/WebSocket" | md5sum | cut -c1-32)
156+
cat > upm-package/WebSocket.meta <<EOF
157+
fileFormatVersion: 2
158+
guid: ${folder_guid}
159+
folderAsset: yes
160+
DefaultImporter:
161+
externalObjects: {}
162+
userData:
163+
assetBundleName:
164+
assetBundleVariant:
165+
EOF
166+
167+
# Generate .meta for package.json
168+
generate_meta "upm-package/package.json"
169+
170+
# Generate .meta for each file in WebSocket/
171+
for f in upm-package/WebSocket/*; do
172+
generate_meta "$f"
173+
done
174+
175+
- name: Gather meta files
176+
run: |
177+
find upm-package/ -name '*.meta' > metaList
178+
cat metaList
179+
180+
- name: Extract Version
181+
id: version
182+
uses: notiz-dev/github-action-json-property@release
183+
with:
184+
path: 'integrations/Unity/package.json'
185+
prop_path: 'version'
186+
- run: echo ${{steps.version.outputs.prop}}
187+
188+
- name: Generate Unity Package
189+
id: build-package
190+
uses: pCYSl5EDgo/create-unitypackage@master
191+
with:
192+
package-path: 'NativeWebSocket.unitypackage'
193+
include-files: metaList
194+
project-folder: upm-package
195+
196+
- name: Upload Package
197+
uses: actions/upload-artifact@v4
198+
with:
199+
path: ./NativeWebSocket.unitypackage
200+
name: NativeWebSocket
201+
202+
- name: Changelog
203+
uses: scottbrenner/generate-changelog-action@master
204+
id: Changelog
205+
206+
- name: Create Release
207+
id: create_release
208+
uses: actions/create-release@v1
209+
env:
210+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
211+
with:
212+
tag_name: ${{ steps.version.outputs.prop }}
213+
release_name: ${{ steps.version.outputs.prop }}
214+
body: |
215+
${{ steps.Changelog.outputs.changelog }}
216+
draft: false
217+
prerelease: true
218+
219+
- name: Upload Release Asset
220+
id: upload-release-asset
221+
uses: actions/upload-release-asset@v1
222+
env:
223+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
224+
with:
225+
upload_url: ${{ steps.create_release.outputs.upload_url }}
226+
asset_path: ./NativeWebSocket.unitypackage
227+
asset_name: NativeWebSocket.unitypackage
228+
asset_content_type: application/x-gzip

.github/workflows/upmsemver.yml

Lines changed: 0 additions & 98 deletions
This file was deleted.

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
.DS_Store
22
node_modules
3+
bin/
4+
obj/
35

46
# This .gitignore file should be placed at the root of your Unity project directory
57
#
@@ -34,6 +36,11 @@ ExportedObj/
3436
*.csproj
3537
*.unityproj
3638
*.sln
39+
40+
# Don't ignore project files for the core library and integrations
41+
!src/**/*.csproj
42+
!integrations/**/*.csproj
43+
!NativeWebSocket.sln
3744
*.suo
3845
*.tmp
3946
*.user
@@ -60,3 +67,4 @@ sysinfo.txt
6067

6168
# Crashlytics generated file
6269
crashlytics-build.properties
70+
.godot

Media/header.png

5.28 KB
Loading

NativeWebSocket.sln

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeWebSocket", "src\NativeWebSocket\NativeWebSocket.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeWebSocket.MonoGame", "integrations\MonoGame\NativeWebSocket.MonoGame.csproj", "{B2C3D4E5-F6A7-8901-BCDE-F12345678901}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGameExample", "examples\MonoGame\MonoGameExample.csproj", "{C3D4E5F6-A7B8-9012-CDEF-123456789012}"
11+
EndProject
12+
Global
13+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
14+
Debug|Any CPU = Debug|Any CPU
15+
Release|Any CPU = Release|Any CPU
16+
EndGlobalSection
17+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
18+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.Build.0 = Debug|Any CPU
20+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.ActiveCfg = Release|Any CPU
21+
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.Build.0 = Release|Any CPU
22+
{B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{C3D4E5F6-A7B8-9012-CDEF-123456789012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{C3D4E5F6-A7B8-9012-CDEF-123456789012}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{C3D4E5F6-A7B8-9012-CDEF-123456789012}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{C3D4E5F6-A7B8-9012-CDEF-123456789012}.Release|Any CPU.Build.0 = Release|Any CPU
30+
EndGlobalSection
31+
EndGlobal

0 commit comments

Comments
 (0)