示例#1
0
        public DarkRiftClientPeer(ISubServer server, IHandlerList <IClientPeer> handlerList, IClient client,
                                  IEnumerable <IClientData> clientData)
        {
            Server           = server;
            this.handlerList = handlerList;
            Client           = client;
            this.clientData  = new Dictionary <Type, IClientData>();

            foreach (var data in clientData)
            {
                this.clientData.Add(data.GetType(), data);
            }

            Server.Plugin.ClientManager.ClientDisconnected += OnDisconnect;
            Console.WriteLine("Created client peer.");
            Client.MessageReceived += OnOperationRequest;
        }
示例#2
0
        public override bool HandleMessage(IMessage message, ISubServer subServer)
        {
            var      connectionCollection = subServer.ConnectionCollection;
            Response response;

            try {
                if (connectionCollection.GetPeers <IClientPeer>().FirstOrDefault(p => p == peer) != default)
                {
                    response = HandleUserAlreadyLoggedIn(message);
                }
                else
                {
                    if (!message.Parameters.ContainsKey((byte)MessageParameterCode.LoginName) ||
                        !message.Parameters.ContainsKey((byte)MessageParameterCode.Password) ||
                        !message.Parameters.ContainsKey((byte)MessageParameterCode.Email))
                    {
                        response = HandleNotEnoughArguments(message);
                    }
                    else
                    {
                        var returnCode = authService.CreateAccount(
                            (string)message.Parameters[(byte)MessageParameterCode.LoginName],
                            (string)message.Parameters[(byte)MessageParameterCode.Password],
                            (string)message.Parameters[(byte)MessageParameterCode.Email]);
                        response = returnCode != ReturnCode.Ok
                            ? HandleInvalidUsernamePassword(returnCode)
                            : HandleCorrectRequest(message, returnCode);
                    }
                }
            }
            catch (KeyNotFoundException e) {
                Console.WriteLine($"Caught exception {e.Message}.");
                Console.WriteLine("For keys: 2, 3, 5.");
                Console.WriteLine($"Caught exception {e.StackTrace}");
                return(false);
            }

            peer.SendMessage(response);
            return(true);
        }
示例#3
0
        private Response HandleCorrectRequest(IMessage message, ISubServer subServer, User user, ReturnCode returnCode)
        {
            // Add our user id to the client peer.
            peer.ClientData <UserData>().Id     = user.Id;
            peer.ClientData <UserData>().Heads  = user.Souls;
            peer.ClientData <UserData>().Skulls = user.Skulls;
            peer.Connect();

            var response = new Response(Code,
                                        new Dictionary <byte, object> {
                { (byte)MessageParameterCode.UserId, user.Id },
                { (byte)MessageParameterCode.Skulls, user.Souls },
                { (byte)MessageParameterCode.Souls, user.Skulls },
                { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }
            }, SubCode, "", (short)returnCode);

            if (subServer.Plugin is ServerPlugin serverPlugin)
            {
                subServer.DisconnectPeer(peer);
                serverPlugin.GetSubServerOfType <MenuSubServer>().First().ConnectPeer(peer);
            }

            return(response);
        }