@@ -66,6 +66,7 @@ private ConnectionConfig Init(NetworkingConfiguration netConfig)
66
66
MessageManager . messageCallbacks = new Dictionary < ushort , Dictionary < int , Action < int , byte [ ] > > > ( ) ;
67
67
MessageManager . messageHandlerCounter = new Dictionary < ushort , int > ( ) ;
68
68
MessageManager . releasedMessageHandlerCounters = new Dictionary < ushort , Stack < int > > ( ) ;
69
+ MessageManager . targetedMessages = new Dictionary < ushort , Dictionary < uint , List < int > > > ( ) ;
69
70
SpawnManager . spawnedObjects = new Dictionary < uint , NetworkedObject > ( ) ;
70
71
SpawnManager . releasedNetworkObjectIds = new Stack < uint > ( ) ;
71
72
if ( NetworkConfig . HandleObjectSpawning )
@@ -321,6 +322,10 @@ private void HandleIncomingData(int connectonId, byte[] data)
321
322
using ( BinaryReader reader = new BinaryReader ( readStream ) )
322
323
{
323
324
ushort messageType = reader . ReadUInt16 ( ) ;
325
+ bool targeted = reader . ReadBoolean ( ) ;
326
+ uint targetNetworkId = 0 ;
327
+ if ( targeted )
328
+ targetNetworkId = reader . ReadUInt32 ( ) ;
324
329
325
330
//Client tried to send a network message that was not the connection request before he was accepted.
326
331
if ( isServer && pendingClients . Contains ( clientId ) && messageType != 0 )
@@ -334,10 +339,22 @@ private void HandleIncomingData(int connectonId, byte[] data)
334
339
if ( messageType >= 32 )
335
340
{
336
341
//Custom message, invoke all message handlers
337
- foreach ( KeyValuePair < int , Action < int , byte [ ] > > pair in MessageManager . messageCallbacks [ messageType ] )
342
+ if ( targeted )
338
343
{
339
- pair . Value ( clientId , incommingData ) ;
340
- }
344
+ List < int > handlerIds = MessageManager . targetedMessages [ messageType ] [ targetNetworkId ] ;
345
+ Debug . Log ( handlerIds . Count ) ;
346
+ for ( int i = 0 ; i < handlerIds . Count ; i ++ )
347
+ {
348
+ MessageManager . messageCallbacks [ messageType ] [ handlerIds [ i ] ] ( clientId , incommingData ) ;
349
+ }
350
+ }
351
+ else
352
+ {
353
+ foreach ( KeyValuePair < int , Action < int , byte [ ] > > pair in MessageManager . messageCallbacks [ messageType ] )
354
+ {
355
+ pair . Value ( clientId , incommingData ) ;
356
+ }
357
+ }
341
358
}
342
359
else
343
360
{
@@ -480,12 +497,15 @@ private void HandleIncomingData(int connectonId, byte[] data)
480
497
}
481
498
}
482
499
483
- internal void Send ( int clientId , string messageType , string channelName , byte [ ] data )
500
+ internal void Send ( int clientId , string messageType , string channelName , byte [ ] data , uint ? networkId = null )
484
501
{
485
502
if ( isHost && clientId == - 1 )
486
503
{
487
504
//Host trying to send data to it's own client
488
- MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
505
+ if ( networkId == null )
506
+ MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
507
+ else
508
+ MessageManager . InvokeTargetedMessageHandler ( messageType , data , clientId , networkId . Value ) ;
489
509
return ;
490
510
}
491
511
else if ( clientId == - 1 )
@@ -498,125 +518,139 @@ internal void Send(int clientId, string messageType, string channelName, byte[]
498
518
using ( BinaryWriter writer = new BinaryWriter ( stream ) )
499
519
{
500
520
writer . Write ( MessageManager . messageTypes [ messageType ] ) ;
521
+ writer . Write ( networkId != null ) ;
522
+ if ( networkId != null )
523
+ writer . Write ( networkId . Value ) ;
501
524
writer . Write ( ( ushort ) data . Length ) ;
502
525
writer . Write ( data ) ;
503
526
}
504
- //2 bytes for message type and 2 bytes for byte length
505
- int size = data . Length + 4 ;
506
527
byte [ ] dataToSend = stream . ToArray ( ) ;
507
528
NetworkTransport . Send ( hostId , clientId , MessageManager . channels [ channelName ] , dataToSend , dataToSend . Length , out error ) ;
508
529
}
509
530
}
510
531
511
- internal void Send ( int [ ] clientIds , string messageType , string channelName , byte [ ] data )
532
+ internal void Send ( int [ ] clientIds , string messageType , string channelName , byte [ ] data , uint ? networkId = null )
512
533
{
513
534
using ( MemoryStream stream = new MemoryStream ( ) )
514
535
{
515
536
using ( BinaryWriter writer = new BinaryWriter ( stream ) )
516
537
{
517
538
writer . Write ( MessageManager . messageTypes [ messageType ] ) ;
539
+ writer . Write ( networkId != null ) ;
540
+ if ( networkId != null )
541
+ writer . Write ( networkId . Value ) ;
518
542
writer . Write ( ( ushort ) data . Length ) ;
519
543
writer . Write ( data ) ;
520
544
}
521
- //2 bytes for message type and 2 bytes for byte length
522
- int size = data . Length + 4 ;
523
545
byte [ ] dataToSend = stream . ToArray ( ) ;
524
546
int channel = MessageManager . channels [ channelName ] ;
525
547
for ( int i = 0 ; i < clientIds . Length ; i ++ )
526
548
{
527
549
int clientId = clientIds [ i ] ;
528
550
if ( isHost && clientId == - 1 )
529
551
{
530
- MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
552
+ if ( networkId == null )
553
+ MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
554
+ else
555
+ MessageManager . InvokeTargetedMessageHandler ( messageType , data , clientId , networkId . Value ) ;
531
556
continue ;
532
557
}
533
558
else if ( clientId == - 1 )
534
559
{
535
560
//Client trying to send data to host
536
561
clientId = serverClientId ;
537
562
}
538
- NetworkTransport . Send ( hostId , clientId , channel , dataToSend , size , out error ) ;
563
+ NetworkTransport . Send ( hostId , clientId , channel , dataToSend , dataToSend . Length , out error ) ;
539
564
}
540
565
}
541
566
}
542
567
543
- internal void Send ( List < int > clientIds , string messageType , string channelName , byte [ ] data )
568
+ internal void Send ( List < int > clientIds , string messageType , string channelName , byte [ ] data , uint ? networkId = null )
544
569
{
545
570
using ( MemoryStream stream = new MemoryStream ( ) )
546
571
{
547
572
using ( BinaryWriter writer = new BinaryWriter ( stream ) )
548
573
{
549
574
writer . Write ( MessageManager . messageTypes [ messageType ] ) ;
575
+ writer . Write ( networkId != null ) ;
576
+ if ( networkId != null )
577
+ writer . Write ( networkId . Value ) ;
550
578
writer . Write ( ( ushort ) data . Length ) ;
551
579
writer . Write ( data ) ;
552
580
}
553
- //2 bytes for message type and 2 bytes for byte length
554
- int size = data . Length + 4 ;
555
581
byte [ ] dataToSend = stream . ToArray ( ) ;
556
582
int channel = MessageManager . channels [ channelName ] ;
557
583
for ( int i = 0 ; i < clientIds . Count ; i ++ )
558
584
{
559
585
int clientId = clientIds [ i ] ;
560
586
if ( isHost && clientId == - 1 )
561
587
{
562
- MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
588
+ if ( networkId == null )
589
+ MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
590
+ else
591
+ MessageManager . InvokeTargetedMessageHandler ( messageType , data , clientId , networkId . Value ) ;
563
592
continue ;
564
593
}
565
594
else if ( clientId == - 1 )
566
595
{
567
596
//Client trying to send data to host
568
597
clientId = serverClientId ;
569
598
}
570
- NetworkTransport . Send ( hostId , clientId , channel , dataToSend , size , out error ) ;
599
+ NetworkTransport . Send ( hostId , clientId , channel , dataToSend , dataToSend . Length , out error ) ;
571
600
}
572
601
}
573
602
}
574
603
575
- internal void Send ( string messageType , string channelName , byte [ ] data )
604
+ internal void Send ( string messageType , string channelName , byte [ ] data , uint ? networkId = null )
576
605
{
577
606
using ( MemoryStream stream = new MemoryStream ( ) )
578
607
{
579
608
using ( BinaryWriter writer = new BinaryWriter ( stream ) )
580
609
{
581
610
writer . Write ( MessageManager . messageTypes [ messageType ] ) ;
611
+ writer . Write ( networkId != null ) ;
612
+ if ( networkId != null )
613
+ writer . Write ( networkId . Value ) ;
582
614
writer . Write ( ( ushort ) data . Length ) ;
583
615
writer . Write ( data ) ;
584
616
}
585
- //2 bytes for message type and 2 bytes for byte length
586
- int size = data . Length + 4 ;
587
617
byte [ ] dataToSend = stream . ToArray ( ) ;
588
618
int channel = MessageManager . channels [ channelName ] ;
589
619
foreach ( KeyValuePair < int , NetworkedClient > pair in connectedClients )
590
620
{
591
621
int clientId = pair . Key ;
592
622
if ( isHost && pair . Key == - 1 )
593
623
{
594
- MessageManager . InvokeMessageHandlers ( messageType , data , pair . Key ) ;
624
+ if ( networkId == null )
625
+ MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
626
+ else
627
+ MessageManager . InvokeTargetedMessageHandler ( messageType , data , clientId , networkId . Value ) ;
595
628
continue ;
596
629
}
597
630
else if ( clientId == - 1 )
598
631
{
599
632
//Client trying to send data to host
600
633
clientId = serverClientId ;
601
634
}
602
- NetworkTransport . Send ( hostId , clientId , channel , dataToSend , size , out error ) ;
635
+ NetworkTransport . Send ( hostId , clientId , channel , dataToSend , dataToSend . Length , out error ) ;
603
636
604
637
}
605
638
}
606
639
}
607
640
608
- internal void Send ( string messageType , string channelName , byte [ ] data , int clientIdToIgnore )
641
+ internal void Send ( string messageType , string channelName , byte [ ] data , int clientIdToIgnore , uint ? networkId = null )
609
642
{
610
643
using ( MemoryStream stream = new MemoryStream ( ) )
611
644
{
612
645
using ( BinaryWriter writer = new BinaryWriter ( stream ) )
613
646
{
614
647
writer . Write ( MessageManager . messageTypes [ messageType ] ) ;
648
+ writer . Write ( networkId != null ) ;
649
+ if ( networkId != null )
650
+ writer . Write ( networkId . Value ) ;
615
651
writer . Write ( ( ushort ) data . Length ) ;
616
652
writer . Write ( data ) ;
617
653
}
618
- //2 bytes for message type and 2 bytes for byte length
619
- int size = data . Length + 4 ;
620
654
byte [ ] dataToSend = stream . ToArray ( ) ;
621
655
int channel = MessageManager . channels [ channelName ] ;
622
656
foreach ( KeyValuePair < int , NetworkedClient > pair in connectedClients )
@@ -626,15 +660,18 @@ internal void Send(string messageType, string channelName, byte[] data, int clie
626
660
int clientId = pair . Key ;
627
661
if ( isHost && pair . Key == - 1 )
628
662
{
629
- MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
663
+ if ( networkId == null )
664
+ MessageManager . InvokeMessageHandlers ( messageType , data , clientId ) ;
665
+ else
666
+ MessageManager . InvokeTargetedMessageHandler ( messageType , data , clientId , networkId . Value ) ;
630
667
continue ;
631
668
}
632
669
else if ( clientId == - 1 )
633
670
{
634
671
//Client trying to send data to host
635
672
clientId = serverClientId ;
636
673
}
637
- NetworkTransport . Send ( hostId , clientId , channel , dataToSend , size , out error ) ;
674
+ NetworkTransport . Send ( hostId , clientId , channel , dataToSend , dataToSend . Length , out error ) ;
638
675
}
639
676
}
640
677
}
0 commit comments