correct conversion of messages to binary (maybe)

BinaryServer
Anton Franzluebbers 2022-01-25 22:50:30 -05:00
parent 94333a389d
commit e837b624cc
8 changed files with 111 additions and 623 deletions

View File

@ -65,7 +65,12 @@ namespace VelNet
protected override void ReceiveState(BinaryReader binaryReader) protected override void ReceiveState(BinaryReader binaryReader)
{ {
Color newColor = binaryReader.ReadColor(); // Color newColor = binaryReader.ReadColor();
Color newColor;
newColor.r = binaryReader.ReadSingle();
newColor.g = binaryReader.ReadSingle();
newColor.b = binaryReader.ReadSingle();
newColor.a = binaryReader.ReadSingle();
if (newColor != color) if (newColor != color)
{ {
rend.material.color = newColor; rend.material.color = newColor;

View File

@ -200,8 +200,8 @@ MonoBehaviour:
isSceneObject: 0 isSceneObject: 0
syncedComponents: syncedComponents:
- {fileID: -4404668399269848200} - {fileID: -4404668399269848200}
- {fileID: 7564913803199044469}
- {fileID: 1181612843795795320} - {fileID: 1181612843795795320}
- {fileID: 7564913803199044469}
--- !u!114 &-4404668399269848200 --- !u!114 &-4404668399269848200
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -216,6 +216,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
networkObject: {fileID: 9102273340480352682} networkObject: {fileID: 9102273340480352682}
serializationRateHz: 30 serializationRateHz: 30
hybridOnChangeCompression: 1
color: {r: 0, g: 0, b: 0, a: 0} color: {r: 0, g: 0, b: 0, a: 0}
--- !u!114 &1181612843795795320 --- !u!114 &1181612843795795320
MonoBehaviour: MonoBehaviour:
@ -248,6 +249,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
networkObject: {fileID: 9102273340480352682} networkObject: {fileID: 9102273340480352682}
serializationRateHz: 60 serializationRateHz: 60
hybridOnChangeCompression: 1
useLocalTransform: 0 useLocalTransform: 0
teleportDistance: 0 teleportDistance: 0
teleportAngle: 0 teleportAngle: 0

View File

@ -603,8 +603,6 @@ RectTransform:
- {fileID: 626742070} - {fileID: 626742070}
- {fileID: 711524767} - {fileID: 711524767}
- {fileID: 864104176} - {fileID: 864104176}
- {fileID: 945446556}
- {fileID: 1843597586}
- {fileID: 948755938} - {fileID: 948755938}
- {fileID: 545137760} - {fileID: 545137760}
m_Father: {fileID: 0} m_Father: {fileID: 0}
@ -629,7 +627,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
velNetManager: {fileID: 1099803616} velNetManager: {fileID: 1099803616}
userInput: {fileID: 626742069} userInput: {fileID: 626742069}
sendInput: {fileID: 945446555} sendInput: {fileID: 0}
roomInput: {fileID: 711524768} roomInput: {fileID: 711524768}
messages: {fileID: 1894247854} messages: {fileID: 1894247854}
messageBuffer: [] messageBuffer: []
@ -890,11 +888,11 @@ RectTransform:
m_Children: m_Children:
- {fileID: 1081889596} - {fileID: 1081889596}
m_Father: {fileID: 244561620} m_Father: {fileID: 244561620}
m_RootOrder: 10 m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 5, y: 165.7} m_AnchoredPosition: {x: 5, y: 76.8}
m_SizeDelta: {x: 160, y: 30} m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0, y: 0} m_Pivot: {x: 0, y: 0}
--- !u!114 &545137761 --- !u!114 &545137761
@ -1953,149 +1951,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 927188572} m_GameObject: {fileID: 927188572}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &945446554
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 945446556}
- component: {fileID: 945446558}
- component: {fileID: 945446557}
- component: {fileID: 945446555}
m_Layer: 5
m_Name: Message
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &945446555
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 945446554}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 945446557}
m_TextComponent: {fileID: 1235343403}
m_Placeholder: {fileID: 1954037270}
m_ContentType: 0
m_InputType: 0
m_AsteriskChar: 42
m_KeyboardType: 0
m_LineType: 0
m_HideMobileInput: 0
m_CharacterValidation: 0
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_CustomCaretColor: 0
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
m_Text:
m_CaretBlinkRate: 0.85
m_CaretWidth: 1
m_ReadOnly: 0
m_ShouldActivateOnSelect: 1
--- !u!224 &945446556
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 945446554}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1954037272}
- {fileID: 1235343401}
m_Father: {fileID: 244561620}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 181.94519, y: 88}
m_SizeDelta: {x: 353.8904, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &945446557
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 945446554}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &945446558
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 945446554}
m_CullTransparentMesh: 1
--- !u!1 &948755937 --- !u!1 &948755937
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2132,7 +1987,7 @@ RectTransform:
- {fileID: 1840952814} - {fileID: 1840952814}
- {fileID: 1992361063} - {fileID: 1992361063}
m_Father: {fileID: 244561620} m_Father: {fileID: 244561620}
m_RootOrder: 9 m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0} m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0}
@ -2153,6 +2008,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
networkObject: {fileID: 948755940} networkObject: {fileID: 948755940}
serializationRateHz: 30 serializationRateHz: 30
hybridOnChangeCompression: 1
text: {fileID: 948755941} text: {fileID: 948755941}
--- !u!114 &948755940 --- !u!114 &948755940
MonoBehaviour: MonoBehaviour:
@ -2671,85 +2527,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1154194181} m_GameObject: {fileID: 1154194181}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1235343400
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1235343401}
- component: {fileID: 1235343402}
- component: {fileID: 1235343403}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1235343401
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1235343400}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 945446556}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.5}
m_SizeDelta: {x: -20, y: -13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1235343402
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1235343400}
m_CullTransparentMesh: 1
--- !u!114 &1235343403
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1235343400}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 0
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text:
--- !u!1 &1278634766 --- !u!1 &1278634766
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3644,218 +3421,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1840952813} m_GameObject: {fileID: 1840952813}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1843597585
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1843597586}
- component: {fileID: 1843597589}
- component: {fileID: 1843597588}
- component: {fileID: 1843597587}
m_Layer: 5
m_Name: Send
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1843597586
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1843597585}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1852007163}
m_Father: {fileID: 244561620}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 416.95, y: 88}
m_SizeDelta: {x: 94.1, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1843597587
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1843597585}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 1843597588}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 244561621}
m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp
m_MethodName: HandleSend
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &1843597588
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1843597585}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1843597589
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1843597585}
m_CullTransparentMesh: 1
--- !u!1 &1852007162
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1852007163}
- component: {fileID: 1852007165}
- component: {fileID: 1852007164}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1852007163
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1852007162}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1843597586}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1852007164
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1852007162}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Send
--- !u!222 &1852007165
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1852007162}
m_CullTransparentMesh: 1
--- !u!1 &1894247852 --- !u!1 &1894247852
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3935,85 +3500,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1894247852} m_GameObject: {fileID: 1894247852}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1954037269
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1954037272}
- component: {fileID: 1954037271}
- component: {fileID: 1954037270}
m_Layer: 5
m_Name: Placeholder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1954037270
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954037269}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 2
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 0
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Enter text...
--- !u!222 &1954037271
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954037269}
m_CullTransparentMesh: 1
--- !u!224 &1954037272
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954037269}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 945446556}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.5}
m_SizeDelta: {x: -20, y: -13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1992361062 --- !u!1 &1992361062
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -4395,6 +3881,10 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: TestNetworkedGameObject value: TestNetworkedGameObject
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8565720275311462453, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3} - target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 6 value: 6

View File

@ -79,12 +79,12 @@ namespace VelNet
VelNetPlayer.SendGroupMessage(this, group, (byte)index, message, reliable); VelNetPlayer.SendGroupMessage(this, group, (byte)index, message, reliable);
} }
public void ReceiveBytes(string identifier, byte[] message) public void ReceiveBytes(byte componentIdx, byte[] message)
{ {
// send the message to the right component // send the message to the right component
try try
{ {
syncedComponents[int.Parse(identifier)].ReceiveBytes(message); syncedComponents[componentIdx].ReceiveBytes(message);
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -29,7 +29,7 @@ namespace VelNet
{ {
try try
{ {
if (IsMine) if (IsMine && enabled)
{ {
byte[] newBytes = SendState(); byte[] newBytes = SendState();
if (hybridOnChangeCompression) if (hybridOnChangeCompression)
@ -37,14 +37,15 @@ namespace VelNet
if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes)) if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes))
{ {
SendBytes(newBytes); SendBytes(newBytes);
lastSendTime = Time.timeAsDouble;
} }
} }
else else
{ {
SendBytes(newBytes); SendBytes(newBytes);
lastSendTime = Time.timeAsDouble;
} }
lastSendTime = Time.timeAsDouble;
lastSentBytes = newBytes; lastSentBytes = newBytes;
} }
} }

View File

@ -31,7 +31,7 @@ namespace VelNet
{ {
try try
{ {
if (IsMine) if (IsMine && enabled)
{ {
using MemoryStream mem = new MemoryStream(); using MemoryStream mem = new MemoryStream();
using BinaryWriter writer = new BinaryWriter(mem); using BinaryWriter writer = new BinaryWriter(mem);
@ -43,14 +43,15 @@ namespace VelNet
if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes)) if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes))
{ {
SendBytes(newBytes); SendBytes(newBytes);
lastSendTime = Time.timeAsDouble;
} }
} }
else else
{ {
SendBytes(newBytes); SendBytes(newBytes);
lastSendTime = Time.timeAsDouble;
} }
lastSendTime = Time.timeAsDouble;
lastSentBytes = newBytes; lastSentBytes = newBytes;
} }
} }

View File

@ -412,7 +412,7 @@ namespace VelNet
{ {
if (players.ContainsKey(dm.senderId)) if (players.ContainsKey(dm.senderId))
{ {
players[dm.senderId]?.HandleMessage(dm); //todo players[dm.senderId]?.HandleMessage(dm);
} }
else else
{ {
@ -431,7 +431,11 @@ namespace VelNet
for (int i = 0; i < sceneObjects.Length; i++) for (int i = 0; i < sceneObjects.Length; i++)
{ {
sceneObjects[i].networkId = -1 + "-" + i; if (sceneObjects[i].sceneNetworkId == 0)
{
Debug.LogError("Scene Network ID is 0. Make sure to assign one first.", sceneObjects[i]);
}
sceneObjects[i].networkId = -1 + "-" + sceneObjects[i].sceneNetworkId;
sceneObjects[i].owner = masterPlayer; sceneObjects[i].owner = masterPlayer;
sceneObjects[i].isSceneObject = true; // needed for special handling when deleted sceneObjects[i].isSceneObject = true; // needed for special handling when deleted
objects.Add(sceneObjects[i].networkId, sceneObjects[i]); objects.Add(sceneObjects[i].networkId, sceneObjects[i]);
@ -484,12 +488,10 @@ namespace VelNet
} }
} }
/// <summary> /// <summary>
/// Reads N bytes /// Runs in background clientReceiveThread; Listens for incoming data.
/// </summary> /// </summary>
/// <param name="stream"></param>
/// <param name="N"></param>
/// <returns></returns>
private static byte[] ReadExact(Stream stream, int N) private static byte[] ReadExact(Stream stream, int N)
{ {
byte[] toReturn = new byte[N]; byte[] toReturn = new byte[N];
@ -517,20 +519,16 @@ namespace VelNet
{ {
socketConnection = new TcpClient(host, port); socketConnection = new TcpClient(host, port);
socketConnection.NoDelay = true; socketConnection.NoDelay = true;
// Get a stream object for reading
NetworkStream stream = socketConnection.GetStream(); NetworkStream stream = socketConnection.GetStream();
using BinaryReader reader = new BinaryReader(stream); using BinaryReader reader = new BinaryReader(stream);
//now we are connected, so add a message to the queue //now we are connected, so add a message to the queue
AddMessage(new ConnectedMessage()); AddMessage(new ConnectedMessage());
//Join("MyRoom");
//SendTo(MessageSendType.MESSAGE_OTHERS, Encoding.UTF8.GetBytes("Hello"));
//FormGroup("close", new List<uint> { 1 });
//SendToGroup("close", Encoding.UTF8.GetBytes("HelloGroup"));
while (true) while (true)
{ {
// Get a stream object for reading
//read a byte //read a byte
byte type = reader.ReadByte(); byte type = (byte)stream.ReadByte();
switch (type) switch (type)
{ {
@ -538,7 +536,7 @@ namespace VelNet
case 0: case 0:
{ {
LoginMessage m = new LoginMessage(); LoginMessage m = new LoginMessage();
m.userId = reader.ReadInt32(); //not really the sender... m.userId = GetIntFromBytes(ReadExact(stream, 4)); //not really the sender...
AddMessage(m); AddMessage(m);
break; break;
} }
@ -547,8 +545,8 @@ namespace VelNet
{ {
RoomsMessage m = new RoomsMessage(); RoomsMessage m = new RoomsMessage();
m.rooms = new List<ListedRoom>(); m.rooms = new List<ListedRoom>();
int N = reader.ReadInt32(); //the size of the payload int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload
byte[] utf8data = reader.ReadBytes(N); byte[] utf8data = ReadExact(stream, N);
string roomMessage = Encoding.UTF8.GetString(utf8data); string roomMessage = Encoding.UTF8.GetString(utf8data);
@ -572,9 +570,9 @@ namespace VelNet
case 2: case 2:
{ {
JoinMessage m = new JoinMessage(); JoinMessage m = new JoinMessage();
m.userId = reader.ReadInt32(); m.userId = GetIntFromBytes(ReadExact(stream, 4));
int N = reader.ReadByte(); int N = stream.ReadByte();
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
m.room = Encoding.UTF8.GetString(utf8data); m.room = Encoding.UTF8.GetString(utf8data);
AddMessage(m); AddMessage(m);
break; break;
@ -583,9 +581,9 @@ namespace VelNet
case 3: case 3:
{ {
DataMessage m = new DataMessage(); DataMessage m = new DataMessage();
m.senderId = reader.ReadInt32(); m.senderId = GetIntFromBytes(ReadExact(stream, 4));
int N = reader.ReadInt32(); //the size of the payload int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload
m.data = reader.ReadBytes(N); //the message m.data = ReadExact(stream, N); //the message
AddMessage(m); AddMessage(m);
break; break;
} }
@ -593,7 +591,7 @@ namespace VelNet
case 4: case 4:
{ {
ChangeMasterMessage m = new ChangeMasterMessage(); ChangeMasterMessage m = new ChangeMasterMessage();
m.masterId = reader.ReadInt32(); //sender is the new master m.masterId = GetIntFromBytes(ReadExact(stream, 4)); //sender is the new master
AddMessage(m); AddMessage(m);
break; break;
} }

View File

@ -61,93 +61,81 @@ namespace VelNet
/// <summary> /// <summary>
/// These are generally things that come from the "owner" and should be enacted locally, where appropriate /// These are generally things that come from the "owner" and should be enacted locally, where appropriate
/// ///
/// Overall message encoding: /// Message encoding:
/// uint16: numMessages
/// for m in numMessages
/// int32: message size (including message type)
/// byte: message type /// byte: message type
/// byte[]: message /// byte[]: message
///
/// The length of the byte[] for message is fixed according to the message type
/// </summary> /// </summary>
public void HandleMessage(VelNetManager.DataMessage m) public void HandleMessage(VelNetManager.DataMessage m)
{ {
using MemoryStream mem = new MemoryStream(m.data); using MemoryStream mem = new MemoryStream(m.data);
using BinaryReader reader = new BinaryReader(mem); using BinaryReader reader = new BinaryReader(mem);
ushort numMessages = reader.ReadUInt16(); //individual message parameters separated by comma
VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte();
for (int i = 0; i < numMessages; i++) switch (messageType)
{ {
//individual message parameters separated by comma case VelNetManager.MessageType.ObjectSync: // sync update for an object I may own
int messageLength = reader.ReadInt32();
VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte();
byte[] message = reader.ReadBytes(messageLength-1);
// make a separate reader to prevent malformed messages from messing us up
using MemoryStream messageMem = new MemoryStream(message);
using BinaryReader messageReader = new BinaryReader(messageMem);
switch (messageType)
{ {
case VelNetManager.MessageType.ObjectSync: // sync update for an object I may own string objectKey = reader.ReadString();
byte componentIdx = reader.ReadByte();
int messageLength = reader.ReadInt32();
byte[] syncMessage = reader.ReadBytes(messageLength);
if (manager.objects.ContainsKey(objectKey))
{ {
string objectKey = messageReader.ReadString(); if (manager.objects[objectKey].owner == this)
string identifier = messageReader.ReadString();
string syncMessage = messageReader.ReadString();
byte[] messageBytes = Convert.FromBase64String(syncMessage);
if (manager.objects.ContainsKey(objectKey))
{ {
if (manager.objects[objectKey].owner == this) manager.objects[objectKey].ReceiveBytes(componentIdx, syncMessage);
{
manager.objects[objectKey].ReceiveBytes(identifier, messageBytes);
}
} }
break;
} }
case VelNetManager.MessageType.TakeOwnership: // I'm trying to take ownership of an object
{
string networkId = messageReader.ReadString();
if (manager.objects.ContainsKey(networkId)) break;
{
manager.objects[networkId].owner = this;
}
break;
}
case VelNetManager.MessageType.Instantiate: // I'm trying to instantiate an object
{
string networkId = messageReader.ReadString();
string prefabName = messageReader.ReadString();
if (manager.objects.ContainsKey(networkId))
{
break; //we already have this one, ignore
}
VelNetManager.SomebodyInstantiatedNetworkObject(networkId, prefabName, this);
break;
}
case VelNetManager.MessageType.Destroy: // I'm trying to destroy a gameobject I own
{
string networkId = messageReader.ReadString();
VelNetManager.NetworkDestroy(networkId);
break;
}
case VelNetManager.MessageType.DeleteSceneObjects: //deleted scene objects
{
int len = messageReader.ReadInt32();
for (int k = 1; k < len; k++)
{
VelNetManager.NetworkDestroy(messageReader.ReadString());
}
break;
}
default:
throw new ArgumentOutOfRangeException();
} }
case VelNetManager.MessageType.TakeOwnership: // I'm trying to take ownership of an object
{
string networkId = reader.ReadString();
if (manager.objects.ContainsKey(networkId))
{
manager.objects[networkId].owner = this;
}
break;
}
case VelNetManager.MessageType.Instantiate: // I'm trying to instantiate an object
{
string networkId = reader.ReadString();
string prefabName = reader.ReadString();
if (manager.objects.ContainsKey(networkId))
{
break; //we already have this one, ignore
}
VelNetManager.SomebodyInstantiatedNetworkObject(networkId, prefabName, this);
break;
}
case VelNetManager.MessageType.Destroy: // I'm trying to destroy a gameobject I own
{
string networkId = reader.ReadString();
VelNetManager.NetworkDestroy(networkId);
break;
}
case VelNetManager.MessageType.DeleteSceneObjects: //deleted scene objects
{
int len = reader.ReadInt32();
for (int k = 1; k < len; k++)
{
VelNetManager.NetworkDestroy(reader.ReadString());
}
break;
}
default:
throw new ArgumentOutOfRangeException();
} }
} }
@ -165,6 +153,7 @@ namespace VelNet
writer.Write((byte)VelNetManager.MessageType.ObjectSync); writer.Write((byte)VelNetManager.MessageType.ObjectSync);
writer.Write(obj.networkId); writer.Write(obj.networkId);
writer.Write(componentIdx); writer.Write(componentIdx);
writer.Write(data.Length);
writer.Write(data); writer.Write(data);
VelNetManager.SendToGroup(group, mem.ToArray(), reliable); VelNetManager.SendToGroup(group, mem.ToArray(), reliable);
} }
@ -176,6 +165,7 @@ namespace VelNet
writer.Write((byte)VelNetManager.MessageType.ObjectSync); writer.Write((byte)VelNetManager.MessageType.ObjectSync);
writer.Write(obj.networkId); writer.Write(obj.networkId);
writer.Write(componentIdx); writer.Write(componentIdx);
writer.Write(data.Length);
writer.Write(data); writer.Write(data);
VelNetManager.SendToRoom(mem.ToArray(), false, reliable); VelNetManager.SendToRoom(mem.ToArray(), false, reliable);
} }
@ -190,6 +180,7 @@ namespace VelNet
{ {
writer.Write(o); writer.Write(o);
} }
VelNetManager.SendToRoom(mem.ToArray()); VelNetManager.SendToRoom(mem.ToArray());
} }