fixes chat echoing

This commit is contained in:
Bob
2010-01-23 20:37:04 +13:00
parent 8d53e7dc97
commit 3496a786e9
2 changed files with 10 additions and 8 deletions

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using IjwFramework.Types;
namespace OpenRa.Network namespace OpenRa.Network
{ {
@@ -60,7 +61,7 @@ namespace OpenRa.Network
Connection.Send( immediateOrders.Serialize( 0 ) ); Connection.Send( immediateOrders.Serialize( 0 ) );
localOrders.RemoveAll( o => o.IsImmediate ); localOrders.RemoveAll( o => o.IsImmediate );
var immediatePackets = new List<byte[]>(); var immediatePackets = new List<Pair<int, byte[]>>();
Connection.Receive( Connection.Receive(
( clientId, packet ) => ( clientId, packet ) =>
@@ -71,14 +72,14 @@ namespace OpenRa.Network
else if( packet.Length >= 5 && packet[ 4 ] == 0x65 ) else if( packet.Length >= 5 && packet[ 4 ] == 0x65 )
CheckSync( packet ); CheckSync( packet );
else if( frame == 0 ) else if( frame == 0 )
immediatePackets.Add( packet ); immediatePackets.Add( Pair.New( clientId, packet ) );
else else
frameClientData.GetOrAdd( frame ).Add( clientId, packet ); frameClientData.GetOrAdd( frame ).Add( clientId, packet );
} ); } );
foreach( var p in immediatePackets ) foreach( var p in immediatePackets )
foreach( var o in p.ToOrderList( world ) ) foreach( var o in p.Second.ToOrderList( world ) )
UnitOrders.ProcessOrder( o ); UnitOrders.ProcessOrder( p.First, o );
} }
Dictionary<int, byte[]> syncForFrame = new Dictionary<int, byte[]>(); Dictionary<int, byte[]> syncForFrame = new Dictionary<int, byte[]>();
@@ -123,9 +124,9 @@ namespace OpenRa.Network
var sync = new List<int>(); var sync = new List<int>();
sync.Add( world.SyncHash() ); sync.Add( world.SyncHash() );
foreach( var order in frameData.OrderBy( p => p.Key ).SelectMany( o => o.Value.ToOrderList( world ) ) ) foreach( var order in frameData.OrderBy( p => p.Key ).SelectMany( o => o.Value.ToOrderList( world ).Select( a => new { Client = o.Key, Order = a } ) ) )
{ {
UnitOrders.ProcessOrder( order ); UnitOrders.ProcessOrder( order.Client, order.Order );
sync.Add( world.SyncHash() ); sync.Add( world.SyncHash() );
} }

View File

@@ -8,13 +8,14 @@ namespace OpenRa.Network
{ {
static class UnitOrders static class UnitOrders
{ {
public static void ProcessOrder( Order order ) public static void ProcessOrder( int clientId, Order order )
{ {
switch( order.OrderString ) switch( order.OrderString )
{ {
case "Chat": case "Chat":
{ {
Game.chat.AddLine(order.Player, order.TargetString); if( clientId != Game.orderManager.Connection.LocalClientId )
Game.chat.AddLine(order.Player, order.TargetString);
break; break;
} }
case "AssignPlayer": case "AssignPlayer":