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