Beispiel #1
0
    public void SendMessage(NetworkData message)
    {
        NetDataWriter writer = new NetDataWriter();

        writer.Put(JsonConvert.SerializeObject(message));
        server?.Send(writer, DeliveryMethod.ReliableOrdered);
    }
        public void Send(byte[] buffer, int offset, int length, bool reliable, bool orderControl, bool returnAfterSend = true)
        {
            if (_serverPeer == null)
            {
                _logger.Error($"Server peer is null");
            }

            _serverPeer?.Send(buffer, offset, length, GetDeliveryMode(reliable, orderControl));
        }
Beispiel #3
0
        /// <summary>
        /// Sends one message to a specific connected peer.
        /// </summary>
        /// <param name="peer">The connection information required to identify the player.</param>
        /// <param name="type">The type of message [INFO, CMD, DATA]</param>
        /// <param name="topic">The topic of this message.</param>
        /// <param name="data">Any number of strings</param>
        private void SendMessage(NetPeer peer, string type, string topic, params string[] data)
        {
            NetDataWriter output  = new NetDataWriter();
            List <string> message = new List <string>();

            message.Add(type);
            message.Add(topic);
            message.AddRange(data);

            output.PutArray(message.ToArray());
            if ((peer?.ConnectionState & ConnectionState.Connected) != 0)
            {
                peer?.Send(output, DeliveryMethod.ReliableOrdered);
            }
        }
Beispiel #4
0
 /// <summary>
 /// Send operation to the server.
 /// </summary>
 /// <param name="dataWriter">Writer parameters</param>
 /// <param name="sendOptions">Options for sending</param>
 public void SendOperation(NetDataWriter dataWriter, DeliveryMethod deliveryMethod)
 => _serverPeer.Send(dataWriter, deliveryMethod);
Beispiel #5
0
        public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod)
        {
            PacketType head = (PacketType)reader.GetInt();

            switch (head)
            {
            case PacketType.createGameRequest:
                Room room = createRoom(peer);
                Console.WriteLine(peer.EndPoint.Address.ToString() + "创建了房间" + room.id);
                NetDataWriter writer = new NetDataWriter();
                writer.Put((int)PacketType.createGameResponse);
                writer.Put(room.id);
                writer.Put(0);    //主机第一个进房间,Id理所应当的是0。
                peer.Send(writer, DeliveryMethod.ReliableOrdered);
                break;

            case PacketType.joinGameRequest:
                string address = reader.GetString();
                room = getRoomByAddress(address);
                int clientID = room.addClient(peer);
                writer = new NetDataWriter();
                writer.Put((int)PacketType.joinGameResponse);
                if (room == null)
                {
                    Console.WriteLine(peer.EndPoint.Address.ToString() + "请求加入房间" + address.ToString() + "失败,没有找到房间");
                    writer.Put(0);
                    writer.Put("RoomNotFound");
                    peer.Send(writer, DeliveryMethod.ReliableOrdered);
                }
                else if (clientID < 0)
                {
                    writer.Put(room.id);
                    writer.Put(clientID);
                    peer.Send(writer, DeliveryMethod.ReliableOrdered);
                }
                else
                {
                    Console.WriteLine(peer.EndPoint.Address.ToString() + "加入房间" + room.id);
                    writer.Put(room.id);
                    writer.Put(clientID);
                    peer.Send(writer, DeliveryMethod.ReliableOrdered);
                    writer.Reset();
                    writer.Put((int)PacketType.joinGameRequest);
                    writer.Put(room.id);
                    writer.Put(clientID);
                    room.host.Send(writer, DeliveryMethod.ReliableOrdered);
                }
                break;

            case PacketType.quitGameRequest:
                int roomID = reader.GetInt();
                room = getRoomByID(roomID);
                if (room != null)
                {
                    if (peer == room.host)
                    {
                        destroyRoom(room);
                    }
                    else
                    {
                        clientID = room.getClientID(peer);
                        if (clientID > -1)
                        {
                            Console.WriteLine("玩家" + peer.EndPoint.Address.ToString() + "退出房间" + roomID);
                            writer = new NetDataWriter();
                            writer.Put((int)PacketType.quitGameResponse);
                            writer.Put(room.id);
                            writer.Put(clientID);
                            room.host.Send(writer, DeliveryMethod.ReliableOrdered);
                            room.removeClient(peer);
                        }
                        else
                        {
                            Console.WriteLine("房间" + roomID + "中不存在玩家" + peer.EndPoint.Address.ToString());
                        }
                    }
                }
                break;

            case PacketType.clientSend:
                roomID = reader.GetInt();
                room   = getRoomByID(roomID);
                if (room != null)
                {
                    clientID = reader.GetInt();
                    writer   = new NetDataWriter();
                    writer.Put((int)PacketType.clientSend);
                    writer.Put(roomID);
                    writer.Put(clientID);
                    string type = reader.GetString();
                    string json = reader.GetString();
                    writer.Put(type);
                    writer.Put(json);
                    room.host.Send(writer, DeliveryMethod.ReliableOrdered);
                    Console.WriteLine("房间" + roomID + "转发客户端" + clientID + "的单发给主机" + "(" + type + ")");
                }
                break;

            case PacketType.serverSend:
                roomID = reader.GetInt();
                room   = getRoomByID(roomID);
                if (room != null)
                {
                    clientID = reader.GetInt();
                    NetPeer client = room.getClientById(clientID);
                    if (client != null)
                    {
                        writer = new NetDataWriter();
                        writer.Put((int)PacketType.serverSend);
                        writer.Put(roomID);
                        writer.Put(clientID);
                        string type = reader.GetString();
                        string json = reader.GetString();
                        writer.Put(type);
                        writer.Put(json);
                        client.Send(writer, DeliveryMethod.ReliableOrdered);
                        Console.WriteLine("房间" + roomID + "转发主机" + room.getClientID(peer) + "的单发给客户端" + room.getClientID(client) + "(" + type + ")");
                    }
                    else
                    {
                        Console.WriteLine("房间" + room.id + "中不存在玩家" + clientID);
                    }
                }
                break;

            case PacketType.serverBroadcast:
                roomID = reader.GetInt();
                room   = getRoomByID(roomID);
                if (room != null)
                {
                    clientID = reader.GetInt();
                    string type = reader.GetString();
                    string json = reader.GetString();
                    foreach (NetPeer client in room.getClients())
                    {
                        writer = new NetDataWriter();
                        writer.Put((int)PacketType.serverBroadcast);
                        writer.Put(roomID);
                        writer.Put(clientID);
                        writer.Put(type);
                        writer.Put(json);
                        client.Send(writer, DeliveryMethod.ReliableOrdered);
                        Console.WriteLine("房间" + roomID + "转发主机" + room.getClientID(peer) + "的广播给客户端" + room.getClientID(client) + "(" + type + ")");
                    }
                }
                break;

            default:
                break;
            }
        }
Beispiel #6
0
 public void SendWriter(NetworkWriter writer, DeliveryMethod method)
 {
     Peer.Send(writer, method);
 }
 public override void Send(BitWriter writer)
 {
     packet.WriteOut(writer);
     receiver?.Send(writer.Assemble(), deliveryMethod);
     writer.Reset();
 }
        //============ Network Data =========================//

        /// <summary>
        /// Sends the specified data.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="options">The options.</param>
        public virtual void Send(byte[] data, DeliveryMethod options)
        {
            _peer.Send(data, options);
        }
Beispiel #9
0
 public override void Send(byte[] data)
 {
     _peer.Send(data, DeliveryMethod.ReliableOrdered);
 }
Beispiel #10
0
 protected void SendCommand(NetCommand command, NetPeer peer, DeliveryMethod deliveryMethod = DeliveryMethod.ReliableOrdered)
 => peer.Send(this.processor.Write(command), deliveryMethod);
Beispiel #11
0
        static void Main(string[] args)
        {
            EventBasedNetListener      netListener      = new EventBasedNetListener();
            EventBasedNatPunchListener netPunchListener = new EventBasedNatPunchListener();

            NetManager client = new NetManager(netListener);
            NetPeer    peer   = null;

            netPunchListener.NatIntroductionRequest += NetPunchListener_NatIntroductionRequest1;

            //收到这个消息说明通道已经打通
            netPunchListener.NatIntroductionSuccess += (point, token) =>
            {
                peer = client.Connect(point, ConnectionKey);//peer必须马上用 否则就没了?
                Console.WriteLine("Success . Connecting to : {0}, connection created: {1}", point, peer != null);
                //peer.Send(Encoding.UTF8.GetBytes("hello1"), DeliveryMethod.ReliableOrdered);
            };


            netListener.NetworkReceiveEvent += NetListener_NetworkReceiveEvent;
            netListener.PeerConnectedEvent  += NetListener_PeerConnectedEvent;

            //netListener.PeerConnectedEvent += peer =>
            //{
            //    Console.WriteLine("PeerConnected: " + peer.EndPoint.ToString());
            //};

            //netListener.NetworkReceiveEvent += NetListener_NetworkReceiveEvent;
            netListener.ConnectionRequestEvent += request =>
            {
                request.AcceptIfKey(ConnectionKey);//关键方法
                Console.WriteLine("acceptifkey: connectionkey");
            };

            netListener.PeerDisconnectedEvent += (p, disconnectInfo) =>
            {
                Console.WriteLine("PeerDisconnected: " + disconnectInfo.Reason);
                if (disconnectInfo.AdditionalData.AvailableBytes > 0)
                {
                    Console.WriteLine("Disconnect data: " + disconnectInfo.AdditionalData.GetInt());
                }
            };

            client.NatPunchEnabled = true;
            client.NatPunchModule.Init(netPunchListener);
            //client.LocalPort;
            client.Start();
            client.NatPunchModule.SendNatIntroduceRequest(NetUtils.MakeEndPoint("2017studio.imwork.net", ServerPort), "token2", clientByte);
            while (true)
            {
                if (Console.KeyAvailable)
                {
                    var key = Console.ReadKey(true).Key;
                    if (key == ConsoleKey.Escape)
                    {
                        break;
                    }
                    if (key == ConsoleKey.A)
                    {
                        //NetDataWriter ndw = new NetDataWriter();

                        //peer.Send()
                        //peer.Send();
                        NetDataWriter ndw = new NetDataWriter();
                        ndw.Put("hello,im" + netListener.GetHashCode());
                        ndw.Put(new byte[2000]);
                        peer.Send(ndw, DeliveryMethod.ReliableOrdered);
                        //client.SendToAll(Encoding.ASCII.GetBytes("hello,im" + netListener.GetHashCode()), DeliveryMethod.ReliableOrdered);
                    }
                }
                client.NatPunchModule.PollEvents();
                client.PollEvents();
                Thread.Sleep(10);
            }
            Console.WriteLine("Hello World!");
        }
Beispiel #12
0
        static int Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.Write("Usage: LiteServer 9001");
                return(1);
            }

            int port = int.Parse(args[0]);


            EventBasedNetListener listener = new EventBasedNetListener();
            NetManager            server   = new NetManager(listener);

            server.Start(port);

            List <NetPeer> peers = new List <NetPeer>();

            listener.ConnectionRequestEvent += request =>
            {
                request.Accept();
            };

            listener.PeerConnectedEvent += peer =>
            {
                peers.Add(peer);
                Console.WriteLine("We got connection: {0}", peer.EndPoint); // Show peer ip
                NetDataWriter writer = new NetDataWriter();                 // Create writer class
                writer.Put("Hello client!");                                // Put some string
                peer.Send(writer, DeliveryMethod.ReliableOrdered);          // Send with reliability
            };

            listener.PeerDisconnectedEvent += (peer, disconnectInfo) =>
            {
                Console.WriteLine($"Peer {peer.EndPoint} disconnected: {disconnectInfo.Reason}");
                peers.Remove(peer);
            };

            ulong numTick = 0;

            while (!Console.KeyAvailable)
            {
                server.PollEvents();

                for (int numPeer = 0; numPeer < peers.Count; numPeer++)
                {
                    string message = $"Hello peer number! {numPeer} Tick number {numTick} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ";
                    byte[] bytes   = Encoding.UTF8.GetBytes(message);

                    NetPeer peer = peers[numPeer];

                    peer.Send(bytes, DeliveryMethod.Unreliable);
                }

                numTick++;

                Thread.Sleep(33);
            }

            server.Stop();

            return(0);
        }
Beispiel #13
0
 public void Emit(NetPeer peer, string data)
 {
     dataWriter.Reset();
     dataWriter.Put(data);
     peer.Send(dataWriter, SendOptions.ReliableOrdered);
 }
Beispiel #14
0
 public static void Send <T>(this NetPeer peer, T message, DeliveryMethod method = DeliveryMethod.ReliableOrdered) where T : Message
 {
     peer.Send(MessagePackSerializer.Serialize(message as Message), method);
 }
Beispiel #15
0
 private void OnPeerConnected(NetPeer peer)
 {
     peer.Send(NetConstants.GetKeyValue(GameKey.JoinedGame), DMethod);
     Log.Information("Alerting client that connection was successful");
 }
 public static void SendMessage(NetPeer peer, NetDataWriter writer)
 {
     peer.Send(writer, DeliveryMethod.ReliableOrdered);
 }
Beispiel #17
0
 public override void SendMessage(IMessage message, DeliveryMethod deliveryMethod = DeliveryMethod.ReliableUnordered)
 {
     _socket.Send(message.ToBytes(), deliveryMethod);
 }
Beispiel #18
0
 public static void Send(NetWriter writer, NetPeer peer, DeliveryMethod deliveryMethod) => peer.Send(writer.Data, 0, writer.LengthBytes, deliveryMethod);
 public void SendPacket(NetDataWriter writer, SendOptions options, NetPeer peer, short msgType)
 {
     writer.Reset();
     writer.Put(msgType);
     peer.Send(writer, options);
 }
Beispiel #20
0
 public static void SendEvent(NetPeer peer, PacketType packetType)
 {
     peer.Send(PacketSerializer.SerializeEvent(packetType), DeliveryMethod.ReliableOrdered);
 }
Beispiel #21
0
 protected override void SendRaw(byte[] raw, bool reliable)
 {
     peer.Send(raw, reliable ? DeliveryMethod.ReliableOrdered : DeliveryMethod.Unreliable);
 }
Beispiel #22
0
 public void SendRoom(byte[] data)
 {
     gameSock?.Send(data, DeliveryMethod.ReliableOrdered);
 }
Beispiel #23
0
 public void Send <T>(NetPeer peer, T packet, DeliveryMethod options) where T : class, new()
 {
     _netDataWriter.Reset();
     Write(_netDataWriter, packet);
     peer.Send(_netDataWriter, options);
 }
 public void Send(byte[] bytes, Reliability reliability)
 {
     peer.Send(bytes, (DeliveryMethod)reliability);
 }
Beispiel #25
0
 public void SendLobby(byte[] data)
 {
     lobbySock?.Send(data, DeliveryMethod.ReliableOrdered);
 }
Beispiel #26
0
 public void SendNetSerializable <T>(NetPeer peer, T packet, DeliveryMethod options) where T : INetSerializable
 {
     _netDataWriter.Reset();
     WriteNetSerializable(_netDataWriter, packet);
     peer.Send(_netDataWriter, options);
 }
Beispiel #27
0
 public void SendMsg(byte[] data)
 {
     _peer?.Send(data, DeliveryMethod.ReliableOrdered);
 }
Beispiel #28
0
 /// <summary>
 /// Sends raw data to the given client by serializing the packet.
 /// This function uses the reliable channel.
 /// </summary>
 /// <param name="client">receiver</param>
 /// <param name="packet">data to be sent</param>
 private void Send(NetPeer client, PacketBase packet)
 {
     writer.Reset();
     packet.Serialize(writer);
     client.Send(writer, SendOptions.ReliableOrdered);
 }
Beispiel #29
0
 public override void BeginSend(byte[] datagram, int bytes)
 {
     peer?.Send(datagram, DeliveryMethod.ReliableOrdered);
     fireCompleteSend();
 }
Beispiel #30
0
 public void Send(SwindlerPacket p, DeliveryMethod method)
 {
     //"Was sent a packet".Log(this);
     _peer.Send(p.Serialize(), method);
 }