Курсов проект № 6 по “Интернет програмиране с Java”

1.6. Organizer Server

Автор: Борис Червенков

www.nakov.com/inetjava

Версия: 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.