توضیحات تکمیلی مربوط به مسابقه را در بلاگ Quera بخوانید: blog.quera.ir
میخواهیم به کمک شما قسمت سرور یک پیام رسان را طراحی کنیم.
این سرور قابلیت عضو شدن (یا register)، و برای افرادی که عضو شده اند قابلیت ورود (یا login) و برای افرادی که وارد شده قابلیت خروج (یا logout) را داشته باشد. همچنین این سرور قابلیت ارسال پیام از یک کاربر به کاربر دیگر را نیز دارد و همچنین برای هر کاربر قابلیت دریافت همه پیام های ارسالی را داشته باشد.
برای برقراری ارتباط کلاینت ها پیام ها را به port
شماره 1234
میفرستند و سرور باید به این port گوش بدهد تا کلاینت ها به آن متصل شوند.
بعد از برقراری ارتباط کلاینت با سرور هر بار که کلاینت یک درخواست میکند، سرور نیز یک یا چند پیام (بسته به نوع پیام فرستاده شده) ارسال میکند.
منظور از یک پیام یک رشته از هر کاراکتری (حتی فاصله) است.
این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و کلمه عبور (یا password) است. درصورت عدم وجود کاربری با این نام کاربری، این سرور یک حساب کاربری جدید ایجاد میکند و پیام "you registered successfully"
را به کلایت ارسال میکند.
فرمت درخواست:
register username password
مثال درخواست:
register mohammad pa3word
در صورت وجود کاربری با نام کاربری مشابه، این درخواست انجام نمیشود و سرور پیام "this username registered"
را به کلاینت ارسال میکند.
تضمین میشود دو رشته نام کاربری یا username و رمزعبور یا password شامل حداقل 3 کاراکتر و حداکثر 10 کاراکتر از حروف کوچک و بزرگ انگلیسی و ارقام باشد.
این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و رمز عبور (یا password) است. در صورت ثبت نام (یا register) بودن این نام کاربری و مطابق بودن رمزعبور با آن، سرور باید یک رشته به نام session که تاکنون برای هیچ کاربری ارسال نشده است را ایجاد و برای کلاینت ارسال کند. توجه کنید که رشته session باید شامل 30 کاراکتر از ارقام باشد.
فرمت درخواست:
login username password
مثال درخواست:
login mohammad pa3word
در صورت عدم تطابق نام کاربری با رمزعبور یا عدم ثبت نام این نام کاربری سرور پیام "wrong username or password"
را به کلاینت ارسال میکند.
این پیام حاوی یک رشته است که نشان دهنده session است. در صورت وجود کاربری با آن session فعال (یعنی این session را login کرده و هنوز logout نکرده است.) این session را از مجموعه session های فعال این کاربر خارج میکند و سرور پیام "your session logout successfully"
را به کلاینت ارسال میکند.
فرمت درخواست:
logout session
مثال درخواست:
logout 987654321098765432109876543210
در صورت عدم وجود چنین session سرور پیام "invalid session"
را به کلاینت ارسال میکند.
این پیام حاوی سه رشته session و username و message است و در صورت معتبر session و وجود یک کاربر با نام کاربری username ، پیام message را به همه session های فعال آن کاربر ارسال کند.
فرمت درخواست:
send session_of_sender contact_username message
مثال درخواست:
send 987654321098765432109876543210 ali salam baraadar
فرمت پیامی که باید برای کلاینت ارسال کنید:
sender: message
مثال فرمت پیام:
ali: salam baraadar
در صورت معتبر نبودن session سرور پیام "invalid session"
را به کلاینت اسال میکند.
در صورت عدم وجود کاربردی با نام کاربری username باید پیام "your contact did not register"
توسط سرور ارسال شود.
و در صورت موفقیت آمیز بودن ارسال پیام "your message send successfully"
ارسال شود.
این پیام حاوی یک رشته session است و در صورت معتبر بودن session، ابتدا تعداد پیام هایی که به این کاربر ارسال شده ولی این session هنوز دریافت نکرده است را به او ارسال میکند. سپس به همان تعداد پیام برای کلاینت ارسال می شود.
فرمت این درخواست:
receive 987654321098765432109876543210
فرمت پیام هایی که برای کلاینت ارسال میشود:
number_of_message$sender: message_1$sender: message_2
مثال پیام هایی که برای کلاینت ارسال می شود:
2$mahdi: salam$mahdi: khubi?
(هر رشته بین $
یک پیام ارسال شده است.)
توجه کنید حتی در صورت وجود یک پیام هم باید تعداد پیام ها ارسال شود.
در صورت معتبر نبودن session سرور پیام "invalid session"
را به کلاینت اسال میکند.
تضمین می شود حداکثر 20 کاربر به سرور متصل خواهد شد و حداکثر 50 درخواست داده میشود و طول پیام ها حداکثر 20 کاراکتر است.
اگر به زبان python میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.py
است. برای این کار پروژه خود را zip کرده به صورتی که server.py
در ریشه فایل zip قرار گیرد.
اگر به زبان java میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.java
است. برای این کار پروژه خود را zip کرده به صورتی که server.java
در ریشه فایل zip قرار گیرد.
اگر به زبان c++ میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.cpp
است. برای این کار پروژه خود را zip کرده به صورتی که server.cpp
در ریشه فایل zip قرار گیرد. توجه کنید که قبل از اجرا دستور make
صدا زده میشود و فایل server.cpp
باید به فایل اجرایی server
تبدیل شود.
اگر به زبان c# میفرستید یک پروژه باید داشته باشیم که نام این پروژه server
است این پروژه را به صورتی zip کنید که فایل server.csproj
در ریشه فایل zip قرار گیرد.
فایل zip را ارسال کنید.