public void WeaponUpdateMessageRecieved(object sender, MessageReceivedEventArgs e) { using (Message message = e.GetMessage() as Message) { if (message.Tag == Tags.WeaponFireStartTag || message.Tag == Tags.WeaponFireEndTag || message.Tag == Tags.WeaponActionTag) { using (DarkRiftReader reader = message.GetReader()) { WeaponFireClientDTO data = reader.ReadSerializable <WeaponFireClientDTO>(); //Read the weapon fire dto off the stack using (DarkRiftWriter fireStartWriter = DarkRiftWriter.Create()) { WeaponFireServerDTO fireData = new WeaponFireServerDTO(); fireData.playerID = e.Client.ID; fireData.fireNum = data.fireNum; fireStartWriter.Write(fireData); int extrastart = reader.Position; int extralength = reader.Length - reader.Position; byte[] rawExtradata = reader.ReadRaw(extralength); fireStartWriter.WriteRaw(rawExtradata, 0, extralength); //Write the extra data from the message //TODO: Think about security implications of sending raw data from client to all clients using (Message fireStartMessage = Message.Create(message.Tag, fireStartWriter)) //Repeat the incoming tagname as all message bodies are the same { foreach (IClient client in worldManager.clients[e.Client].World.GetClients().Where(x => x != e.Client)) { client.SendMessage(fireStartMessage, SendMode.Reliable); } } } } } } }
public void UnRegisterClient(IClient client) { //Stop all firemodes for client (when sending ushort.MaxValue, by convention all firemodes are stopped) using (DarkRiftWriter fireEndWriter = DarkRiftWriter.Create()) { WeaponFireServerDTO fireData = new WeaponFireServerDTO(); fireData.playerID = client.ID; fireData.fireNum = ushort.MaxValue; fireEndWriter.Write(fireData); using (Message fireStartMessage = Message.Create(Tags.WeaponFireEndTag, fireEndWriter)) { foreach (IClient _client in worldManager.clients[client].World.GetClients().Where(x => x != client)) { _client.SendMessage(fireStartMessage, SendMode.Reliable); } } } }