Beispiel #1
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }