public void DispatchMessage(ConnectionId connectionId, ObjectId receiverObjectId, INetworkMessage <IObjectMessage> objectMessage, SequenceNumber sequenceNumber, float latency) { var pooledInstance = _instances[receiverObjectId]; if (pooledInstance == null) { Debug.LogWarning("object with ID " + receiverObjectId + " does not exist"); } else { var instance = pooledInstance.Instance; var senderRole = ObjectRole.Nobody; { var isOwner = connectionId == instance.OwnerConnectionId; var isAuthority = connectionId == instance.AuthorityConnectionId; senderRole = senderRole | (isOwner ? ObjectRole.Owner : ObjectRole.Nobody); senderRole = senderRole | (isAuthority ? ObjectRole.Authority : ObjectRole.Nobody); senderRole = senderRole | (!isOwner && !isAuthority ? ObjectRole.Others : ObjectRole.Nobody); } instance.GameObjectNetworkInfo.LastReceivedMessageTimestamp = Time.realtimeSinceStartup; instance.MessageHandler.Dispatch(new Sender(connectionId, senderRole, sequenceNumber, latency), objectMessage); objectMessage.Dispose(); } }
public void Send <TMessage>(IPEndPoint endpoint, INetworkMessage <TMessage> message) where TMessage : IMessage { _netBuffer.Reset(); message.Serialize(_netBuffer); message.Dispose(); _transporter.SendUnconnected(endpoint, _netBuffer); }
public void Send <TMessage>(INetworkMessage <TMessage> message, ObjectRole recipient) where TMessage : IObjectMessage { if ((recipient & ObjectRole.Owner) != 0 || (recipient & ObjectRole.Authority) != 0) { var sequenceNumber = _sequenceNumberCounter; _messageRouter.Dispatch(new Sender(ConnectionId.NoConnection, ObjectRoles.Everyone, sequenceNumber, 0), message); _sequenceNumberCounter = sequenceNumber.Increment(); } message.Dispose(); }