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; }
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); }
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); }