コード例 #1
0
        /// <summary>
        /// 收到玩家加入房间的请求,玩家能否加入房间取决于客户端逻辑(比如房间是否已满)
        /// </summary>
        /// <param name="request"></param>
        /// <param name="player"></param>
        void reqJoinRoom(ConnectionRequest request, RoomPlayerData player)
        {
            log?.logTrace(request.RemoteEndPoint + $"({player.id}) 请求加入房间。");
            RoomData roomData = null;

            try
            {
                roomData = onJoinRoomReq?.Invoke(player);
            }
            catch (Exception e)
            {
                log?.log(request.RemoteEndPoint + "加入房间的请求被拒绝,原因:" + e);
                request.Reject(createRPCResponseWriter(PacketType.joinResponse, e));
                return;
            }
            //接受了加入请求,回复请求并广播房间更新信息。
            NetPeer peer = request.Accept();

            _playerInfoDict[player.id] = new LANPlayerInfo()
            {
                ip   = request.RemoteEndPoint,
                peer = peer
            };
            // invokeBroadcast(nameof(ntfRoomAddPlayer), roomData.ID, player);
            // invokeBroadcast(nameof(ntfUpdateRoom), roomData);
        }
コード例 #2
0
        private static void Postfix(CustomLiteNetLib4MirrorTransport __instance, ConnectionRequest request)
        {
            var allow  = true;
            var reason = "No Reason";

            if (!request.Data.EndOfData)
            {
                return;
            }

            var userId = CustomLiteNetLib4MirrorTransport.UserIds[request.RemoteEndPoint].UserId;

            SynapseController.Server.Events.Server.InvokePreAuthenticationEvent(userId, ref allow, ref reason, request);

            if (allow)
            {
                request.Accept();
                return;
            }

            var data = new NetDataWriter();

            data.Put((byte)10);
            data.Put(reason);
            request.RejectForce(data);
        }
コード例 #3
0
        private void OnConnectionRequested(ConnectionRequest request)
        {
            if (_networker.PeersCount < MaxPlayers)
            {
                string pin = request.Data.GetString();
                if (pin == Pin)
                {
                    NetPeer peer     = request.Accept();
                    string  userName = request.Data.GetString();
                    peer.Tag = userName;

                    Players.Add(peer);
                    Log.Information("Connection request from {endPoint} with username {userName} accepted", request.RemoteEndPoint, userName);
                }
                else
                {
                    request.Reject(NetConstants.GetKeyValue(NetKey.DisconnectInvalidPin));
                    Log.Information("Connection request from {endPoint} rejected due to invalid key", request.RemoteEndPoint);
                }
            }
            else
            {
                request.Reject(NetConstants.GetKeyValue(NetKey.DisconnectServerFull));
                Log.Information("Connection request from {endPoint} rejected as server full", request.RemoteEndPoint);
            }
        }
コード例 #4
0
        public void OnConnectionRequest(ConnectionRequest request)
        {
            if (NumClientsConnected >= NumMaxClients)
            {
                request.Reject();
                return;
            }

            var reader = request.Data;

            var span = new ReadOnlySpan <byte>(reader.RawData, reader.UserDataOffset, reader.UserDataSize);
            var bs   = new BitReader(span, memory);

            var approvalResult = ApproveConnection.Invoke(bs);

            if (!approvalResult.Approved)
            {
                Debug.Log($"[Server] Connection denied ({approvalResult.DenialReason})");
                var deniedBs = new BitWriter();
                deniedBs.WriteString(approvalResult.DenialReason);
                request.Reject(deniedBs.DataWritten.ToArray(), 0, deniedBs.BytesWritten);
                return;
            }

            Debug.Log("[Server] Connection approved");
            request.Accept();
        }
コード例 #5
0
 public void OnConnectionRequest(ConnectionRequest request)
 {
     request.Accept().name = request.Data.GetString();
     Console.WriteLine(
         "[Server] ConnectionRequest. Ep: {0}, Accepted: {1}",
         request.RemoteEndPoint,
         true);
 }
コード例 #6
0
            public void OnConnectionRequest(ConnectionRequest request)
            {
                var key          = System.Text.Encoding.UTF8.GetBytes("gamekey");
                var acceptedPeer = request.Data.SequenceEqual(key) ? request.Accept() : null;

                Console.WriteLine("[Server] ConnectionRequest. Ep: {0}, Accepted: {1}",
                                  request.RemoteEndPoint,
                                  acceptedPeer != null);
            }
コード例 #7
0
            public void OnConnectionRequest(ConnectionRequest request)
            {
                var key = System.Text.Encoding.UTF8.GetBytes("key");

                if (request.Data.SequenceEqual(key))
                {
                    request.Accept();
                }
            }
コード例 #8
0
 private void TryAccept(ConnectionRequest request, string userId, string userName, bool isConnectionOwner)
 {
     if (this.isRelay && !this.hasConnectionOwner && !isConnectionOwner)
     {
         this._pendingRequests.Add(new LiteNetLibConnectionManager.NetPeerConnectionRequest(request, userId, userName, isConnectionOwner));
         return;
     }
     this.CreatePendingConnection(request.Accept(), userId, userName, isConnectionOwner);
 }
コード例 #9
0
        public bool InitServer(ConnectionRequest request, string receivedToken, List <string> addons)
        {
            ServerDirectory = Path.Combine("servers", $"{ServerAddress}_{ServerPort}");

            LoadServerConfig();
            UpdateName();

            if (ServerConfig.InstalledAddons == null)
            {
                ServerConfig.InstalledAddons = new List <string>();
            }

            foreach (var addon in addons)
            {
                if (!ServerConfig.InstalledAddons.Contains(addon))
                {
                    ServerConfig.InstalledAddons.Add(addon);
                }
            }

            if (string.IsNullOrEmpty(ServerConfig.Token))
            {
                Peer = request.Accept();

                PacketProcessor.Send <SendTokenPacket>(Peer,
                                                       new SendTokenPacket()
                {
                    Token = GenNewToken()
                }, DeliveryMethod.ReliableOrdered);
                return(true);
            }

            if (receivedToken != ServerConfig.Token)
            {
                NPManager.Singleton.Logger.Error($"Received invalid token from server {FullAddress}.");
                NetDataWriter writer = new NetDataWriter();
                writer.Put((byte)RejectType.InvalidToken);
                request.Reject(writer);
                return(false);
            }

            Peer = request.Accept();
            return(true);
        }
コード例 #10
0
        public void OnConnectionRequest(ConnectionRequest req)
        {
            if (!arbiter && server.settings.maxPlayers > 0 && server.players.Count(p => !p.IsArbiter) >= server.settings.maxPlayers)
            {
                req.Reject(IConnection.GetDisconnectBytes(MpDisconnectReason.ServerFull));
                return;
            }

            req.Accept();
        }
コード例 #11
0
ファイル: NetworkServer.cs プロジェクト: niqqq25/MultiJuice
 void ConnectionRequestEvent(ConnectionRequest request)
 {
     if (connections.Count < GameConfig.maxClients)
     {
         request.Accept();
     }
     else
     {
         request.Reject();
     }
 }
コード例 #12
0
        private void OnConnectionRequest(ConnectionRequest request)
        {
            if (netManager.ConnectedPeerList.Count > config.Clients)
            {
                Console.WriteLine("Too many clients try to connect to the server");
                request.Reject();
                return;
            }

            request.Accept();
        }
コード例 #13
0
        public void OnConnectionRequest(ConnectionRequest req)
        {
            if (!arbiter && server.settings.maxPlayers > 0 && server.players.Count(p => !p.IsArbiter) >= server.settings.maxPlayers)
            {
                var writer = new ByteWriter();
                writer.WriteString("Server is full");
                req.Reject(writer.GetArray());
                return;
            }

            req.Accept();
        }
コード例 #14
0
ファイル: Server.cs プロジェクト: staticnullnet/Nantucket
 public void OnConnectionRequest(ConnectionRequest request)
 {
     if (server.ConnectedPeersCount < MAX_CONNECTED_PEERS)
     {
         Debug.Log($"Incoming connection from {request.RemoteEndPoint.ToString()}");
         request.Accept();
     }
     else
     {
         Debug.Log("Connection refused. Too many connections.");
     }
 }
コード例 #15
0
ファイル: NetworkingLiteNet.cs プロジェクト: rwmt/Multiplayer
        public void OnConnectionRequest(ConnectionRequest req)
        {
            var result = server.playerManager.OnPreConnect(req.RemoteEndPoint.Address);

            if (result != null)
            {
                req.Reject(ConnectionBase.GetDisconnectBytes(result.Value));
                return;
            }

            req.Accept();
        }
コード例 #16
0
        private static void Postfix(ConnectionRequest request)
        {
            try
            {
                var allow  = true;
                var reason = "No Reason";

                if (!request.Data.EndOfData)
                {
                    return;
                }

                var userId = "";

                if (CustomLiteNetLib4MirrorTransport.UserIds.ContainsKey(request.RemoteEndPoint))
                {
                    userId = CustomLiteNetLib4MirrorTransport.UserIds[request.RemoteEndPoint].UserId;
                }

                SynapseController.Server.Events.Server.InvokePreAuthenticationEvent(userId, ref allow, ref reason, request);

                if (allow)
                {
                    request.Accept();
                    return;
                }

                var data = new NetDataWriter();
                data.Put((byte)10);
                data.Put(reason);
                request.RejectForce(data);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: PreAuthenticationFailed failed!!\n{e}");
                //Just casually accept if Synapse messes up here.
                request.Accept();
            }
        }
コード例 #17
0
    public void OnConnectionRequest(ConnectionRequest request)
    {
        var host = transport.GetHost(hostId, specialConnectionId);

        if (host.PeersCount < maxConnections)
        {
            request.Accept();
        }
        else
        {
            request.Reject();
        }
    }
コード例 #18
0
        public void OnConnectionRequest(ConnectionRequest request)
        {
            //Forwarding event to app, let them decide to accept or not client
            if (!appListener.OnConnectionRequest(request))
            {
                request.Reject();
                return;
            }

            NetPeer peer = request.Accept();

            players.Add(peer.Id, new ServerPlayer(peer));
        }
コード例 #19
0
        protected internal virtual void ProcessConnectionRequest(ConnectionRequest request)
        {
            /* if (LiteNetLib4MirrorCore.Host.PeersCount >= maxConnections)
             * {
             *      request.Reject();
             * }
             * else if (request.AcceptIfKey(LiteNetLib4MirrorServer.Code) == null)
             * {
             *      Debug.LogWarning("Client tried to join with an invalid auth code! Current code:" + LiteNetLib4MirrorServer.Code);
             * } */

            request.Accept();
        }
コード例 #20
0
        public void OnConnectionRequest(ConnectionRequest request)
        {
            if (!m_Server.CanPlayerJoin())
            {
                Logger.Info(
                    "Connection request from {request} rejected: server is full.",
                    request.ToFriendlyString());
                request.Reject(new[] { Convert.ToByte(EDisconnectReason.ServerIsFull) });
                return;
            }

            Logger.Info("Connection request from {request}.", request.ToFriendlyString());
            request.Accept();
        }
コード例 #21
0
    private void HandleConnectionRequest(ConnectionRequest request)
    {
        // Always accept local connections.
        var addr = request.RemoteEndPoint.Address;

        if (addr.Equals(IPAddress.IPv6Loopback) || addr.Equals(IPAddress.Loopback))
        {
            request.Accept();
            return;
        }

        if (Host !.AcceptClients)
        {
            request.AcceptIfKey(Host.Password);
        }
コード例 #22
0
        //============ INetEventListener methods ============//

        /// <summary>
        /// On peer connection requested
        /// </summary>
        /// <param name="request">Request information (EndPoint, internal id, additional data)</param>
        public virtual void OnConnectionRequest(ConnectionRequest request)
        {
            NetDataReader dataReader = request.Data;

            string key = dataReader.GetString();

            if (key != TinyNetGameManager.instance.multiplayerConnectKey)
            {
                request.Reject();
            }

            NetPeer peer = request.Accept();

            peer.Tag = dataReader.GetString();
        }
コード例 #23
0
    public void OnConnectionRequest(ConnectionRequest request)
    {
        var    dataReader = request.Data;
        string key        = dataReader.GetString();

        if (key != "hashcode")
        {
            request.Reject();
        }
        var    peer     = request.Accept();
        int    hashcode = dataReader.GetInt();
        string name     = dataReader.GetString();

        peer.Tag = hashcode;
        Debug.Log("RECEIVED CONNECTINO REQUEST");
    }
コード例 #24
0
        public void OnConnectionRequest(ConnectionRequest rq)
        {
            try
            {
                string name = rq.Data.GetString(rq.Data.GetInt());
                Guid   uid  = new Guid(rq.Data.GetRemainingBytes());

                //TODO Check validaty

                NetPeer peer = rq.Accept();
                players.Add(peer.Id, new NetPlayer(peer, name, uid));
            } catch (Exception e)
            {
                rq.Reject(Packets.CreateProtocolError("Invalid connection request."));
            }
        }
コード例 #25
0
        public override void OnConnectionRequest(ConnectionRequest request)
        {
            base.OnConnectionRequest(request);

            NetDataReader dataReader = request.Data;

            string key = dataReader.GetString();

            if (!TinyNetGameManager.instance.CheckConnectionKey(key))
            {
                request.Reject();
            }

            NetPeer peer = request.Accept();

            peer.Tag = dataReader.GetString();
        }
コード例 #26
0
ファイル: H3Server.cs プロジェクト: Rickeetz/H3MP
            public void OnConnectionRequest(H3Server server, ConnectionRequest request, NetDataWriter rejectionContent)
            {
                var currentClients = server.ClientsCount;
                var maxClients     = server._config.PlayerLimit.Value;

                if (currentClients >= maxClients)
                {
                    server._log.LogWarning($"Rejecting join request from {request.RemoteEndPoint} because of full party ({currentClients} / {maxClients}).");

                    rejectionContent.Put(JoinError.Full);
                    request.Reject(rejectionContent);
                    return;
                }

                var reader = request.Data;

                if (!reader.TryGet <ConnectionRequestMessage>(out var message))
                {
                    server._log.LogWarning($"Join request from {request.RemoteEndPoint} had a malformed request.");

                    rejectionContent.Put(JoinError.MalformedMessage);
                    request.Reject(rejectionContent);
                    return;
                }

                if (message.AccessKey != server.Secret.Key)
                {
                    server._log.LogWarning($"Join request {request.RemoteEndPoint} had an incorrect key.");

                    rejectionContent.Put(JoinError.MismatchedKey);
                    request.Reject(rejectionContent);
                    return;
                }

                var peer = request.Accept();

                if (message.HostKey == server.HostKey)
                {
                    server._selfID = peer.Id;
                }

                using (WriterPool.Instance.Borrow(out var writer))
                {
                    _pong.Send(peer, writer, Timestamped <PingMessage> .Now(new PingMessage(message.ClientTime)));
                }
            }
コード例 #27
0
ファイル: NebulaServer.cs プロジェクト: wwwK/Nebula
        public override void OnConnectionRequest(ConnectionRequest request)
        {
            WriteLine($"Connection Request from '{request.RemoteEndPoint.Address}:{request.RemoteEndPoint.Port}'", ConsoleColor.Cyan);
            if (NetManager.ConnectedPeersCount >= MaximumConnections)
            {
                request.Reject(NetDataWriter.FromString("Server Full"));
                WriteLine($"Refused Connection from '{request.RemoteEndPoint.Address}:{request.RemoteEndPoint.Port}'. Reason: Server Full", ConsoleColor.DarkRed);
                return;
            }

            if (!String.IsNullOrWhiteSpace(ServerKey))
            {
                request.AcceptIfKey(ServerKey);
            }
            else
            {
                request.Accept();
            }
        }
コード例 #28
0
    public void OnConnectionRequest(ConnectionRequest request)
    {
        var key = request.Data.GetString();

        if (connectedPeers < connectedPeerLimit &&
            key == $"rgbfighters:{Application.version}")
        {
            request.Accept();
        }

        else if (connectedPeers >= connectedPeerLimit)
        {
            request.Reject(Encoding.ASCII.GetBytes("SServerFull"));
        }

        else if (key != $"rgbfighters:{Application.version}")
        {
            request.Reject(Encoding.ASCII.GetBytes("SServerClientMismatch"));
        }
    }
コード例 #29
0
        public void OnConnectionRequest(ConnectionRequest request)
        {
            var connectPaket = new VoicePaketConnectServer();

            connectPaket.Deserialize(request.Data);
            if (connectPaket.Secret != _secret)
            {
                Logger.Warn("Unauthorized connect from {0} : Wrong secret", request.RemoteEndPoint);
                request.Reject();
                return;
            }
            if (connectPaket.Version < _requiredClientVersion)
            {
                Logger.Warn("Unauthorized connect from {0} : Wrong Version {1}", request.RemoteEndPoint, connectPaket.Version);
                request.Reject();
                VoiceClientOutdated?.Invoke(connectPaket.ClientGUID, connectPaket.Version, _requiredClientVersion);
                return;
            }
            Logger.Debug("Connection accepted {0}", request.RemoteEndPoint);
            request.Accept();
        }
コード例 #30
0
        private void OnConnectionRequestEvent(ConnectionRequest request)
        {
            // PlayerSessionId を接続時に受け取って GameLift に問い合わせる
            var pid = request.Data.GetString();

            _logger.InfoFormat("playerSessionId: {0}", pid);
            var res = GameLiftServerAPI.AcceptPlayerSession(pid);

            if (!res.Success)
            {
                request.Reject();
                return;
            }

            if (!_playerEndPoints.Add(request.RemoteEndPoint, pid))
            {
                request.Reject();
                return;
            }

            request.Accept();
        }