internal void _Write(NetBuffer buffer) { buffer.Write(position.x); buffer.Write(position.y); buffer.Write(position.z); buffer.Write(rotation.x); buffer.Write(rotation.y); buffer.Write(rotation.z); buffer.Write(rotation.w); buffer.Write((byte)relativeTo); remoteViewID._Write(buffer); group._Write(buffer); buffer.Write((byte)authFlags); buffer.Write(isInstantiatedRemotely); buffer.Write(proxyPrefab); buffer.Write(ownerPrefab); buffer.Write(serverPrefab); buffer.Write(cellAuthPrefab); buffer.Write(cellProxyPrefab); if (_networkView.initialData != null) { var initialData = _networkView.initialData._ToArray(); buffer.WriteVariableUInt32((uint)initialData.Length); buffer.Write(initialData); } else { buffer.WriteVariableUInt32(0); } if (_networkView._hasSerializeHandover) { var stream = new BitStream(true, false); _networkView._SerializeHandover(stream, new NetworkMessageInfo(NetworkPlayer.unassigned, 0, 0, 0, NetworkFlags.NoTimestamp, _networkView)); var handoverData = stream._ToArray(); buffer.WriteVariableUInt32((uint)handoverData.Length); buffer.Write(handoverData); } else { buffer.WriteVariableUInt32(0); } }
// Outgoing forwarded message (non-auth server uses this) public NetworkMessage(NetworkBaseLocal network, NetworkMessage msg, NetworkPlayer originalSender) { flags = msg.flags; connection = msg.connection; channel = msg.channel; localTimeSent = msg.localTimeSent; monotonicServerTimeSent = msg.monotonicServerTimeSent; rawServerTimeSent = msg.rawServerTimeSent; name = msg.name; internCode = msg.internCode; sender = originalSender; target = msg.target; exclude = msg.exclude; viewID = msg.viewID; stream = new BitStream(isTypeSafe); var buffer = stream._buffer; HeaderFlags headerFlags = 0; if (sender != network._localPlayer) { headerFlags |= HeaderFlags.HasOriginalSenderPlayerID; } if (isBroadcast) { headerFlags |= (hasExcludeID) ? HeaderFlags.HasBroadcastExcludePlayerID : HeaderFlags.Broadcast; } else if (hasTargetID) { headerFlags |= HeaderFlags.HasTargetPlayerID; } if (hasViewID && isInternal) { headerFlags |= HeaderFlags.HasInternalCodeAndViewID; } else if (hasViewID) { headerFlags |= (isBuffered) ? HeaderFlags.HasNameAndViewIDAndIsBuffered : HeaderFlags.HasNameAndViewID; } else { headerFlags |= HeaderFlags.HasInternalCode; } // TODO: use 24bit timestamp if needed if (hasTimestamp) { headerFlags |= HeaderFlags.Has16BitTimestamp; } if (isTypeSafe) { headerFlags |= HeaderFlags.HasTypeCodes; } buffer.Write((byte)headerFlags); if (sender != network._localPlayer) { sender._Write(buffer); } if (hasTargetID) { target._Write(buffer); } if (hasExcludeID) { exclude._Write(buffer); } if (hasViewID) { viewID._Write(buffer); } if (internCode == InternalCode.None) { buffer.Write(name); } else { buffer.Write((byte)internCode); } if (hasTimestamp) { #if PIKKO_BUILD ulong timestampInMillis = (ulong)NetTime.ToMillis(localTimestamp); #else ulong timestampInMillis = (ulong)NetTime.ToMillis(rawServerTimeSent); #endif // TODO: use 24bit timestamp if needed buffer.Write(timestampInMillis, 16); } buffer.PositionBits = buffer.LengthBits; int argpos = msg.stream._buffer.PositionBytes; stream._buffer.Write(msg.stream._buffer.Data, argpos, msg.stream._buffer.LengthBytes - argpos); }
public void WriteNetworkViewID(NetworkViewID value) { value._Write(_buffer); }
internal static void _Write(NetBuffer buffer, NetworkViewID viewID, NetBuffer data) { viewID._Write(buffer); SerializedBuffer._Write(buffer, data); }