public WriteBytesAndSize ( byte buffer, int count ) : void | ||
buffer | byte | Array of bytes to write. |
count | int | Number of bytes from the array to write. |
return | void |
public override void Serialize(NetworkWriter writer) { writer.Write(this.netId); if (this.parameters == null) { writer.WriteBytesAndSize(this.parameters, 0); } else { writer.WriteBytesAndSize(this.parameters, this.parameters.Length); } }
public override void Serialize(NetworkWriter writer) { writer.Write(this.netId); writer.WritePackedUInt32((uint) this.stateHash); writer.Write(this.normalizedTime); if (this.parameters == null) { writer.WriteBytesAndSize(this.parameters, 0); } else { writer.WriteBytesAndSize(this.parameters, this.parameters.Length); } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// // vis2k: readstring bug prevention: https://issuetracker.unity3d.com/issues/unet-networkwriter-dot-write-causing-readstring-slash-readbytes-out-of-range-errors-in-clients // -> OnSerialize writes length,componentData,length,componentData,... // -> OnDeserialize carefully extracts each data, then deserializes each component with separate readers // -> it will be impossible to read too many or too few bytes in OnDeserialize // -> we can properly track down errors internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, bool initialState) { // serialize into a temporary writer NetworkWriter temp = new NetworkWriter(); bool result = false; try { result = comp.OnSerialize(temp, initialState); } catch (Exception e) { // show a detailed error and let the user know what went wrong Debug.LogError("OnSerialize failed for: object=" + name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + "\n\n" + e.ToString()); } byte[] bytes = temp.ToArray(); if (LogFilter.logDebug) { Debug.Log("OnSerializeSafely written for object=" + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + " length=" + bytes.Length); } // original HLAPI had a warning in UNetUpdate() in case of large state updates. let's move it here, might // be useful for debugging. if (bytes.Length > NetworkServer.maxPacketSize) { if (LogFilter.logWarn) { Debug.LogWarning("Large state update of " + bytes.Length + " bytes for netId:" + netId + " from script:" + comp); } } // serialize length,data into the real writer, untouched by user code writer.WriteBytesAndSize(bytes); return(result); }
public override void Serialize(NetworkWriter writer) { writer.WritePackedUInt32((uint) this.oldConnectionId); writer.WritePackedUInt32((uint) this.playerControllerId); writer.Write(this.netId); writer.WriteBytesAndSize(this.msgData, this.msgSize); }
// vis2k: readstring bug prevention: https://issuetracker.unity3d.com/issues/unet-networkwriter-dot-write-causing-readstring-slash-readbytes-out-of-range-errors-in-clients // -> OnSerialize writes length,componentData,length,componentData,... // -> OnDeserialize carefully extracts each data, then deserializes each component with separate readers // -> it will be impossible to read too many or too few bytes in OnDeserialize // -> we can properly track down errors internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, bool initialState) { // serialize into a temporary writer NetworkWriter temp = new NetworkWriter(); bool result = false; try { result = comp.OnSerialize(temp, initialState); } catch (Exception e) { // show a detailed error and let the user know what went wrong Debug.LogError("OnSerialize failed for: object=" + name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + "\n\n" + e.ToString()); } byte[] bytes = temp.ToArray(); if (LogFilter.logDebug) { Debug.Log("OnSerializeSafely written for object=" + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + " length=" + bytes.Length); } // serialize length,data into the real writer, untouched by user code writer.WriteBytesAndSize(bytes, bytes.Length); // length,data return(result); }
public override void Serialize(NetworkWriter writer) { writer.Write(this.netId); writer.WriteBytesAndSize(this.parameters, this.parameters.Length); }
public override void Serialize(NetworkWriter writer) { writer.Write((ushort) this.playerControllerId); writer.WriteBytesAndSize(this.msgData, this.msgSize); }