public static void Connect(Client handler, string line, string[] splitData) { if (handler.IsProperlyConnected) return; string[] data; if (ParserHelper.Connect(splitData, out data)) { if (handler.Handler.ClientsManager.NickRegistered(data[0])) { System.Data.Common.DbDataReader reader = References.Database.Read(string.Format("SELECT {0}, {1} FROM {2} WHERE {3}=@val", InternalReferences.NICKS_PASS_COL, InternalReferences.NICKS_SALT_COL, InternalReferences.NICKS_TABLE, InternalReferences.NICKS_NICK_COL), new Mono.Data.Sqlite.SqliteParameter("@val", data[0])); string hash = ""; string salt = ""; while (reader.Read()) { hash = reader.GetString(0); salt = reader.GetString(1); } reader.Close(); reader = null; if (!Utils.ValidPassword(data[1], hash, salt)) { handler.SendError(SendType.ERROR_0002, SendType.CONNECT, line); return; } handler.SetAuthenticated(true); } if (handler.SetNickName(data[0])) { handler.Send(SendType.CONNECT, string.Format("Connected{0}true", SyntaxCode.VALUE_SPLITTER)); handler.IsProperlyConnected = true; handler.SetRealName(data[2] ?? data[0]); } else { handler.SendError(SendType.ERROR_0006, SendType.CONNECT, line); } } else handler.SendError(SendType.ERROR_0005, SendType.CONNECT, line); }
public static void Ping(Client handler, string line, string[] splitData) { string[] data; ParserHelper.Ping(splitData, out data); if (data[0] == null) { // Client wants to ping the server handler.Send(SendType.PONG); } else { // Client wants to ping a client if (!handler.Handler.ClientsManager.NickTaken(data[0])) { handler.SendError(SendType.ERROR_0004, SendType.PING, line); return; } Client client = handler.Handler.ClientsManager.GetClient(data[0]); client.Send(SendType.PING, string.Format("User{0}{1}", SyntaxCode.VALUE_SPLITTER, data[0])); } }