#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see COPYING. */ #endregion using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace OpenRA.Network { public class ReplayConnection : IConnection { FileStream replayStream; List sync = new List(); public ReplayConnection( string replayFilename ) { replayStream = File.OpenRead( replayFilename ); } public int LocalClientId { get { return 0; } } public ConnectionState ConnectionState { get { return ConnectionState.Connected; } } // do nothing; ignore locally generated orders public void Send( int frame, List orders ) { } public void SendImmediate( List orders ) { } public void SendSync( int frame, byte[] syncData ) { var ms = new MemoryStream(); ms.Write( BitConverter.GetBytes( frame ) ); ms.Write( syncData ); sync.Add( ms.ToArray() ); } public void Receive( Action packetFn ) { while( sync.Count != 0 ) { packetFn( LocalClientId, sync[ 0 ] ); sync.RemoveAt( 0 ); } if( replayStream == null ) return; var reader = new BinaryReader( replayStream ); while( replayStream.Position < replayStream.Length ) { var client = reader.ReadInt32(); var packetLen = reader.ReadInt32(); var packet = reader.ReadBytes( packetLen ); packetFn( client, packet ); } replayStream = null; } public void Dispose() { } } }