private void SendTickBuffer() { var ticks = new VMNetTickList { Ticks = TickBuffer }; byte[] data; using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { ticks.SerializeInto(writer); } data = stream.ToArray(); } using (var stream = new PacketStream((byte)PacketType.VM_PACKET, 0)) { stream.WriteHeader(); stream.WriteInt32(data.Length + (int)PacketHeaders.UNENCRYPTED); stream.WriteBytes(data); Broadcast(stream.ToArray(), ClientsToSync); } TickBuffer.Clear(); }
//uh, this is a little silly. private void SendOneOff(NetworkClient client, VMNetTick tick) { var ticks = new VMNetTickList { Ticks = new List<VMNetTick>() { tick }, ImmediateMode = true }; byte[] data; using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { ticks.SerializeInto(writer); } data = stream.ToArray(); } using (var stream = new PacketStream((byte)PacketType.VM_PACKET, 0)) { stream.WriteHeader(); stream.WriteInt32(data.Length + (int)PacketHeaders.UNENCRYPTED); stream.WriteBytes(data); client.Send(stream.ToArray()); } }
private void SendState(VM vm) { if (ClientsToSync.Count == 0) return; //Console.WriteLine("== SERIAL: Sending State to Client... =="); var watch = new Stopwatch(); watch.Start(); var state = vm.Save(); //Console.WriteLine("== STATE: Intermediate - after save... " + watch.ElapsedMilliseconds + " ms. =="); var cmd = new VMNetCommand(new VMStateSyncCmd { State = state }); //currently just hack this on the tick system. will change when we switch to not gonzonet var ticks = new VMNetTickList { Ticks = new List<VMNetTick> { new VMNetTick { Commands = new List<VMNetCommand> { cmd }, RandomSeed = 0, //will be restored by client from cmd TickID = TickID } } }; byte[] data; using (var stream = new MemoryStream()) { //Console.WriteLine("== STATE: Intermediate - before serialize... " + watch.ElapsedMilliseconds + " ms. =="); using (var writer = new BinaryWriter(stream)) { ticks.SerializeInto(writer); } //Console.WriteLine("== STATE: Intermediate - before toArray... " + watch.ElapsedMilliseconds + " ms. =="); data = stream.ToArray(); } //Console.WriteLine("== STATE: Intermediate - before send... " + watch.ElapsedMilliseconds + " ms. =="); byte[] packet; using (var stream = new PacketStream((byte)PacketType.VM_PACKET, 0)) { stream.WriteHeader(); stream.WriteInt32(data.Length + (int)PacketHeaders.UNENCRYPTED); stream.WriteBytes(data); packet = stream.ToArray(); } foreach (var client in ClientsToSync) client.Send(packet); ClientsToSync.Clear(); watch.Stop(); //Console.WriteLine("== SERIAL: DONE! State send took "+watch.ElapsedMilliseconds+" ms. =="); }
private void SendState(VM vm) { if (ClientsToSync.Count == 0) return; var state = vm.Save(); var cmd = new VMNetCommand(new VMStateSyncCmd { State = state }); //currently just hack this on the tick system. will change when we switch to not gonzonet var ticks = new VMNetTickList { Ticks = new List<VMNetTick> { new VMNetTick { Commands = new List<VMNetCommand> { cmd }, RandomSeed = 0, //will be restored by client from cmd TickID = TickID } } }; byte[] data; using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { ticks.SerializeInto(writer); } data = stream.ToArray(); } using (var stream = new PacketStream((byte)PacketType.VM_PACKET, 0)) { stream.WriteHeader(); stream.WriteInt32(data.Length + (int)PacketHeaders.UNENCRYPTED); stream.WriteBytes(data); var packet = stream.ToArray(); foreach (var client in ClientsToSync) client.Send(packet); } ClientsToSync.Clear(); }