예제 #1
0
        public MessagingChannel(MessageTargetMap messageTargetMap, List <NetPeer> peers)
        {
            _messageTargetMap = messageTargetMap;

            _bufferStream    = new MemoryStream();
            _immediateStream = new MemoryStream();

            _peers = peers;
        }
예제 #2
0
        public ClientSystem(World world, MessageTargetMap messageTargetMap, MessagingChannel messagingChannel)
        {
            _world = world;

            MessageListeners = new Dictionary <Type, IMessageReceiver>();

            _messageTargetMap = messageTargetMap;
            _messagingChannel = messagingChannel;

            var serverMessagingTargetEntity = _world.CreateEntity();

            serverMessagingTargetEntity.Set(new ServerMessagingTarget()
            {
                Channel = _messagingChannel
            });

            EventBasedNetListener listener = new EventBasedNetListener();

            _client = new NetManager(listener);
            _client.SimulatePacketLoss         = true;
            _client.SimulationPacketLossChance = 5;
            _client.DisconnectTimeout          = 60000;

            _client.Start();
            _client.Connect("localhost" /* host ip or name */, 9050 /* port */, "SomeConnectionKey" /* text key or NetDataWriter */);

            listener.PeerConnectedEvent += (netPeer) =>
            {
                _messagingChannel.PeerAdded(netPeer);
            };

            listener.NetworkReceiveEvent += (fromPeer, dataReader, deliveryMethod) =>
            {
                Utilties.Logging.Metrics.LogMetric("Client:Networking:RecievedMessages:Size", dataReader.UserDataSize, TimeSpan.FromSeconds(5));
                MessageRecieved(new ArraySegment <byte>(dataReader.RawData, dataReader.UserDataOffset, dataReader.UserDataSize));
                dataReader.Recycle();
            };
        }
예제 #3
0
        public ServerSystem(World world, MessageTargetMap messageTargetMap)
        {
            _messageTargetMap = messageTargetMap;

            MessageListeners = new Dictionary <Type, IMessageReceiver>();

            _newPeers = new List <NetPeer>();

            _world = world;

            _clientEntities = world.GetEntities().With <ClientMessagingTarget>().AsSet();

            EventBasedNetListener listener = new EventBasedNetListener();

            _server = new NetManager(listener);
            _server.SimulatePacketLoss         = true;
            _server.SimulationPacketLossChance = 5;
            _server.DisconnectTimeout          = 60000;
            _server.Start(9050 /* port */);

            listener.ConnectionRequestEvent += request =>
            {
                request.AcceptIfKey("SomeConnectionKey");
            };

            listener.PeerConnectedEvent += peer =>
            {
                _newPeers.Add(peer);
            };

            listener.NetworkReceiveEvent += (fromPeer, dataReader, deliveryMethod) =>
            {
                MessageRecieved(new ArraySegment <byte>(dataReader.RawData, dataReader.UserDataOffset, dataReader.UserDataSize));
                dataReader.Recycle();
            };
        }
예제 #4
0
 public MessagingChannel(MessageTargetMap messageTargetMap, NetPeer peer) : this(messageTargetMap, new List <NetPeer>() { peer })
 {
 }
예제 #5
0
 public MessagingChannel(MessageTargetMap messageTargetMap) : this(messageTargetMap, new List <NetPeer>())
 {
 }