Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Macket messenger #130

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
6fd4bdc
Added OWNER
Mar 7, 2017
08ff89c
Merge remote-tracking branch 'upstream/master'
Mar 14, 2017
99afbf5
Merge remote-tracking branch 'upstream/master'
Mar 15, 2017
b2b1083
Merge remote-tracking branch 'upstream/master'
Mar 21, 2017
994359d
Добавил код для дешифрования при помощи частотного анализа
Mar 22, 2017
cdc8609
Merge remote-tracking branch 'upstream/master'
Apr 5, 2017
ea09c19
Merge remote-tracking branch 'upstream/master'
Apr 8, 2017
17d957a
Merge remote-tracking branch 'upstream/master'
Apr 11, 2017
9cb2165
Просто коммит
Apr 18, 2017
caed98f
Подтянул мессенджер из upstream
Apr 18, 2017
ac6a11a
Сделал каркас многопоточного сервера
Apr 21, 2017
b5dc44e
Реализовал многопоточность через ThreadPool
May 4, 2017
984655b
Передача сообщений посредством сериализации
May 7, 2017
9f08efb
Обновил мессенджер
Jun 20, 2017
e494ddb
Сохренение пользователей в БД
Jun 22, 2017
f74c1d3
Сделал чаты
Jun 23, 2017
d80dad5
Вход-выход из чатов, список чатов пользователя, история чата
Jul 5, 2017
ed1c774
Реализовал паттерн команда на сервере
Jul 6, 2017
719e233
Реализовал команду на клиенте и удалил лишнее
Jul 6, 2017
d24b67f
Доработал мелочи и удалил лишнее
Jul 8, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions OWNER.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Макеев Иван Алексеевич, СА-11
Binary file added example.db
Binary file not shown.
Binary file added example1.db
Binary file not shown.
6 changes: 6 additions & 0 deletions logs/application.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
2017-07-08 13:56:45 INFO MessengerClient:91 - Starting listener thread...
2017-07-08 13:57:09 ERROR MessengerClient:100 - Failed to process connection: {}
java.lang.NullPointerException
at track.msgtest.messenger.teacher.client.MessengerClient.onMessage(MessengerClient.java:114)
at track.msgtest.messenger.teacher.client.MessengerClient.lambda$initSocket$0(MessengerClient.java:98)
at java.lang.Thread.run(Thread.java:745)
1 change: 0 additions & 1 deletion src/main/java/track/lessons/l7threads/DeadLock.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package track.lessons.l7threads;


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

Expand Down
68 changes: 39 additions & 29 deletions src/main/java/track/lessons/lesson5generics/Cypher.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package track.lessons.lesson5generics;

import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;

import track.util.Util;

Expand All @@ -24,43 +20,60 @@ private Map<Character, Integer> readData(String data) {
ch += SYMBOL_DIST;
}
// Если это буква, то собираем частотную информацию



if (map.containsKey(ch)) {
map.put(ch, map.get(ch) + 1);
} else {
map.put(ch, 1);
}
}
}
return map;
}

/**
На вход приходит текст
1. Считываем readData() и получаем мапу {Символ -> Кол-во употреблений}
2. Далее нам нужно отсортировать пары ключ-значение по значению
(Называются{@code List<Map.Entry<Character, Integer>>})
(то есть по частоте употребления). Для этого можно создать список этих пар и отсортировать список.
У java.lang.List есть вспомогательный метод {@link List#sort(Comparator)}
Где Comparator - это логика сравнения объектов.

3. После того, как получен отсортированный список {@code List<Map.Entry<Character, Integer>>} нужно превратить его
обратно в Map для того, чтобы иметь быстрый доступ get().

/*
* На вход приходит текст
* 1. Считываем readData() и получаем мапу {Символ -> Кол-во употреблений}
* 2. Далее нам нужно отсортировать пары ключ-значение по значению
* (Называются{@code List<Map.Entry<Character, Integer>>})
* (то есть по частоте употребления). Для этого можно создать список этих пар и отсортировать список.
* У java.lang.List есть вспомогательный метод {@link List#sort(Comparator)}
* Где Comparator - это логика сравнения объектов.
* <p>
* 3. После того, как получен отсортированный список {@code List<Map.Entry<Character, Integer>>
* нужно превратить его
* обратно в Map для того, чтобы иметь быстрый доступ get().
*/
public Map<Character, Integer> buildHist(String data) {
Map<Character, Integer> map = readData(data);

return null;
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
LinkedHashMap<Character, Integer> hist = new LinkedHashMap<>();
for (Map.Entry<Character, Integer> entry : list) {
hist.put(entry.getKey(), entry.getValue());
}
System.out.println(hist);
return hist;
}

/**
* Заменяем символы зашифрованного текста по таблицам частот
*
* @param in - отсортированный по частоте алфавит для основного текста
* @param out - отсортированный по частоте алфавит для шифрованного текста
* @param in - отсортированный по частоте алфавит для основного текста
* @param out - отсортированный по частоте алфавит для шифрованного текста
* @param encrypted - зашифрованный текст
* @return расшифрованный текст
*/
public String merge(List<Character> in, List<Character> out, String encrypted) {
return null;
StringBuilder decrypted = new StringBuilder();
for (int i = 0; i < encrypted.length(); i++) {
int idx = out.indexOf(encrypted.charAt(i));
if (idx >= 0) {
decrypted.append(in.get(idx));
} else {
decrypted.append(" ");
}
}
return decrypted.toString();
}

public static void main(String[] args) {
Expand All @@ -79,7 +92,4 @@ public static void main(String[] args) {

}

}



}
229 changes: 115 additions & 114 deletions src/main/java/track/lessons/lesson9/JdbcExample.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class JdbcExample {

static Logger log = LoggerFactory.getLogger(JdbcExample.class);

public static final String PATH_TO_DB = "/Users/dmirty/Dima/track17-spring/track17-spring/track.sqlite";
public static final String PATH_TO_DB = "/home/ivan/technotrack/project_java/track17-spring/example1.db";

public static void main(String[] args) throws SQLException, ClassNotFoundException {

Expand All @@ -27,129 +27,130 @@ public static void main(String[] args) throws SQLException, ClassNotFoundExcepti
// 2) База идентифицируется урлом, в случае SQLite - это путь к файлу в ФС
Connection connection = DriverManager.getConnection("jdbc:sqlite:" + PATH_TO_DB);

final String sql = "SELECT * FROM users LIMIT 3;";
String sql = "SELECT * FROM users LIMIT 3;";

Statement stmt = null;
ResultSet rs = null;
try {
//ResultSet rs = null;

// 3) Это объект для передачи запроса в базу
stmt = connection.createStatement();

// 4) Набор "строк" таблицы - результат SELECT
rs = stmt.executeQuery(sql);

// 5) Структура ResultSet - получаем строки, пока есть
while (rs.next()) {
// Column index starts with 1
Integer id = rs.getInt(1); // 1 - ID
String name = rs.getString("name"); // 2 - name
Integer age = rs.getInt("age"); // 3 - age

System.out.println(String.format("ID: %d, name: %s, age: %d", id, name, age));

}
} catch (SQLException e) {
log.error("Failed to execute statement: " + sql, e);
} finally {
Util.closeQuietly(rs, stmt);
}


//
// stmt = connection.createStatement();
// sql = "CREATE TABLE IF NOT EXISTS company" +
// "(ID INT PRIMARY KEY NOT NULL," +
// " NAME TEXT NOT NULL, " +
// " AGE INT NOT NULL, " +
// " ADDRESS CHAR(50), " +
// " SALARY REAL)";
// stmt.executeUpdate(sql);
// stmt.close();
// c.close();
//
// connection.setAutoCommit(false);
//
// stmt = connection.createStatement();
// sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );";
// stmt.executeUpdate(sql);
// try {
//
// sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 );";
// stmt.executeUpdate(sql);
// // 3) Это объект для передачи запроса в базу
// stmt = connection.createStatement();
//
// sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );";
// stmt.executeUpdate(sql);
// // 4) Набор "строк" таблицы - результат SELECT
// rs = stmt.executeQuery(sql);
//
// sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
// stmt.executeUpdate(sql);
// // 5) Структура ResultSet - получаем строки, пока есть
// while (rs.next()) {
// // Column index starts with 1
// Integer id = rs.getInt(1); // 1 - ID
// String name = rs.getString("name"); // 2 - name
// Integer age = rs.getInt("age"); // 3 - age
//
// stmt.close();
// connection.commit();
//// c.close();
// System.out.println(String.format("ID: %d, name: %s, age: %d", id, name, age));
//
// stmt = connection.createStatement();
// ResultSet rs = stmt.executeQuery("SELECT * FROM COMPANY;");
// while (rs.next()) {
// int id = rs.getInt("id");
// String name = rs.getString("name");
// int age = rs.getInt("age");
// String address = rs.getString("address");
// float salary = rs.getFloat("salary");
// System.out.println("ID = " + id);
// System.out.println("NAME = " + name);
// System.out.println("AGE = " + age);
// System.out.println("ADDRESS = " + address);
// System.out.println("SALARY = " + salary);
// System.out.println();
// }
// } catch (SQLException e) {
// log.error("Failed to execute statement: " + sql, e);
// } finally {
// Util.closeQuietly(rs, stmt);
// }
// rs.close();
// stmt.close();
//// c.close();
//
// stmt = connection.createStatement();
// sql = "UPDATE COMPANY SET SALARY = 25000.00 WHERE ID=1;";
// stmt.executeUpdate(sql);
// connection.commit();
//
// rs = stmt.executeQuery("SELECT * FROM COMPANY;");
// while (rs.next()) {
// int id = rs.getInt("id");
// String name = rs.getString("name");
// int age = rs.getInt("age");
// String address = rs.getString("address");
// float salary = rs.getFloat("salary");
// System.out.println("ID = " + id);
// System.out.println("NAME = " + name);
// System.out.println("AGE = " + age);
// System.out.println("ADDRESS = " + address);
// System.out.println("SALARY = " + salary);
// System.out.println();
// }
// rs.close();
// stmt.close();
//// c.close();
//
// stmt = connection.createStatement();
// sql = "DELETE FROM COMPANY WHERE ID=2;";
// stmt.executeUpdate(sql);
// connection.commit();
//
// rs = stmt.executeQuery("SELECT * FROM COMPANY;");
// while (rs.next()) {
// int id = rs.getInt("id");
// String name = rs.getString("name");
// int age = rs.getInt("age");
// String address = rs.getString("address");
// float salary = rs.getFloat("salary");
// System.out.println("ID = " + id);
// System.out.println("NAME = " + name);
// System.out.println("AGE = " + age);
// System.out.println("ADDRESS = " + address);
// System.out.println("SALARY = " + salary);
// System.out.println();
// }
// rs.close();
// stmt.close();


stmt = connection.createStatement();
sql = "CREATE TABLE IF NOT EXISTS company" +
"(ID INT PRIMARY KEY NOT NULL," +
" NAME TEXT NOT NULL, " +
" AGE INT NOT NULL, " +
" ADDRESS CHAR(50), " +
" SALARY REAL)";
stmt.executeUpdate(sql);
stmt.close();
// c.close();

connection.setAutoCommit(false);

stmt = connection.createStatement();
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );";
stmt.executeUpdate(sql);

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 );";
stmt.executeUpdate(sql);

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );";
stmt.executeUpdate(sql);

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
stmt.executeUpdate(sql);

stmt.close();
connection.commit();
// c.close();

stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM COMPANY;");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println("ID = " + id);
System.out.println("NAME = " + name);
System.out.println("AGE = " + age);
System.out.println("ADDRESS = " + address);
System.out.println("SALARY = " + salary);
System.out.println();
}
rs.close();
stmt.close();
// c.close();

stmt = connection.createStatement();
sql = "UPDATE COMPANY SET SALARY = 25000.00 WHERE ID=1;";
stmt.executeUpdate(sql);
connection.commit();

rs = stmt.executeQuery("SELECT * FROM COMPANY;");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println("ID = " + id);
System.out.println("NAME = " + name);
System.out.println("AGE = " + age);
System.out.println("ADDRESS = " + address);
System.out.println("SALARY = " + salary);
System.out.println();
}
rs.close();
stmt.close();
// c.close();

stmt = connection.createStatement();
sql = "DELETE FROM COMPANY WHERE ID=2;";
stmt.executeUpdate(sql);
connection.commit();

rs = stmt.executeQuery("SELECT * FROM COMPANY;");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println("ID = " + id);
System.out.println("NAME = " + name);
System.out.println("AGE = " + age);
System.out.println("ADDRESS = " + address);
System.out.println("SALARY = " + salary);
System.out.println();
}
rs.close();
stmt.close();


/*
Expand Down
1 change: 0 additions & 1 deletion src/main/java/track/lessons/lesson9/orm/UserDao.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package track.lessons.lesson9.orm;


import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
Expand Down
Loading