Курсов проект № 6 по “Интернет програмиране с Java”
1.6. Organizer Server
Автор: Борис Червенков
Версия: 0.9
Последна промяна: 18.03. 2004
Да се напише програма на Java, която използвайки възможностите на пакета java.net реализира прост сървър за организиране на електрони бележки (събития) с възможности за администриране и работа на много потребители едновременно. Всички данни трябва да се пазят във външен текстов файл. Сървърът трябва да реализира комуникацията с потребителите по протокол TCP на порт 8192.
Функционални възможности
Органайзър сървърът трябва да има следните възможности:
Команди на сървъра
При осъществяване на връзка с някой клиент сървърът трябва да дава следното съобщение:
сървър: |
Organizer server. Please login |
LOGIN <username> <password>
Идентифицира потребител. Сървърът трябва да съхранява потребителите и техните пароли в текстов файл. При успешна идентификация потребителят преминава в режим, в който може да въвежда други команди. Пример:
клиент: |
LOGIN ivan parola |
сървър: |
User ivan logged in. |
При неуспешна идентификация сървърът извежда съобщение за грешка и прекъсва връзката.
клиент: |
LOGIN ivan greshka |
сървър: |
Invalid login. (server closes connection) |
Следващите команди могат да се изпълняват само след успешно идентифициран потребител:
ADD <time> <description>
Добавя ново събитие в списъка на потребителя. Формата на часа е час:минута, като водещата нула в часа и минутата са задължителни. Пример:
клиент: |
ADD 05:12 Extremno sybujdane |
сървър: |
Event added. |
Ако се забележи невалиден формат на данните (невалиден формат на часа или липсваща информация), системата трябва да връща съобщение за грешка:
клиент: |
ADD 5232523 Extremno |
сървър: |
Invalid time format. Use hh:mm. |
LIST
Показва списък с текущо зададените събития. Ако потребителят е администратор, системата показва всички дефинирани събития за всички потребители. Ако потребителят не е администратор, тази команда показва само събитията, дефинирани от текущия потребител. Подредбата е по реда на въвеждане на събитията. Пример за изпълнение на командата от потребителя admin:
клиент: |
LIST |
сървър: |
Events: (1) boris - 15:20 - Da se obadia na Pesho (2) ivan - 14:12 - Da otida na zybolekar (3) boris - 17:30 - Da ne zabravia da kupia bileti |
Изпълнение на командата като потребител boris:
клиент: |
LIST |
сървър: |
Events: (1) 07:30 – Stavam za rabota (2) 08:00 – Ako ne sym stanal, stavam za rabota (3) 08:30 – Nepremenno triabva da stana za rabota. Veche dori zakysniavam. (4) 12:00 – Sreshta s loshia shef na celia otdel. (5) 21:00 – Sreshta s novata kaka – na Popa, pred kinoto. Da kupia tsvetya! |
REMOVE <number>
Изтрива събитието под номер <number>. Номерацията е по реда на въвеждане на събитията, точно както ги номерира командата LIST.
Ако потребителят е admin, системата работи върху събитията на всички потребители, а в противен случай системата оперира над събитията на текущия потребител. Пример:
клиент: |
REMOVE 1 |
сървър: |
Event successfully removed. |
При невалиден номер системата трябва да дава съобщение за грешка. Например:
клиент: |
REMOVE 1525243 |
сървър: |
Event number must be between 1 and 4. |
Нотификация за събитие
При настъпване на часа, указан за някое събитие, системата трябва да изпрати e-mail съобщение на притежателя на това събитие. Е-mail съобщението трябва да бъде има subject в следния формат:
Origanizer: <time> - <description>
Например:
Organizer: 17:30 - Da ne zabravia da kupia bileti za "Lista v shumata 2"
Тялото на e-mail съобщението е в свободен текст. След изпращане на нотификация за събитие събитието трябва да се изтрие от списъка на съответния потребител.
Административни възможности на сървъра
Потребителят admin няма email адрес и не може да има собствени събития. Само този потребител може да изпълнява следните административни команди:
ADDUSER <username> <password> <email>
Добавя нов потребител в системата. Всички параметри са задължителни. Тази команда трябва да е валидна само за потребителя admin.
клиент: |
ADDUSER boris edno [email protected] |
сървър: |
User boris added. |
Ако се въведе невалидна команда, системата трябва да дава следното съобщение за грешка:
клиент: |
Oifgwe;goew)( KJNKJN |
сървър: |
Invalid command. |
Ако текущият потребител няма право да изпълнява операцията, системата трябва да дава следното съобщение за грешка:
клиент: |
ADDUSER mente tajna_majna [email protected] |
сървър: |
You do not have administrative privileges. |