علی و محمد دو دوست هستند که در یک ساختمان زندگی میکنند. آنها میخواهند آخر شب ها با هم چت کنند و تصمیم گرفتهاند راهی پیدا کنند که بتوانند به طور مستقیم به هم متصل شوند و پیام ارسال کنند.
برای این کار، آنها به کمک شما نیاز دارند تا در نوشتن برنامه پیامرسان محلی کمکشان کنید.
فایل پروژه اولیه را از [اینجا](https://blog.quera.ir/wp-content/uploads/2018/10/LocalMessanger-contestant.zip) دریافت کنید.
## کارکرد برنامه:
ابتدا دو کاربر باید به یک ``wifi`` متصل شوند، سپس یکی از آن دو باید در صفحه اصلی گزینه ``connect to me`` و دیگری گزینه ``connect to others`` را انتخاب کند.
با انتخاب گزینه ``connect to me`` دستگاه اندرویدی مانند یک سرور برای چت عمل میکند و کاربر به صفحه ``ServerActivity`` انتقال داده میشود. در این صفحه ``ip`` و ``port`` ای که برای اتصال کاربر دوم درنظر گرفته شده، به ترتیب در ``TextView`` با آیدی ``text_ip`` و ``text_port`` نمایش داده میشوند.
با انتخاب گزینه ``connect to others`` کاربر به صفحه ``ClientActivity`` منتقل میشود. در این صفحه ``ip`` و ``port`` نمایش داده شده توسط دستگاه اول، به ترتیب در ``EditText`` با آیدی ``edit_text_ip`` و ``edit_text_port`` وارد میشوند.
پس از وارد کردن این اطلاعات، با لمس دکمه ``connect`` به محض برقراری ارتباط، هر دو دستگاه وارد صفحه ``MessageActivity`` میشوند که همان صفحه مخصوص چت است.
در صفحه چت با نوشتن متن مورد نظر درون ``EditText`` و لمس دکمه ``send`` در این صفحه، پیام برای کاربر دیگر ارسال میشود.
در صفحه چت، یک ``TextView`` با آیدی ``text_message`` نیز وجود دارد. این ``TextView`` همواره **آخرین** پیامی که کاربر **از دستگاه دیگر** دریافت کرده را نمایش میدهد و تا قبل از دریافت اولین پیام نیز هیچ متنی را نمایش نمیدهد.
نمونه پیام نمایش دادهشده در تلفن همراه:
```
a test message
```
نمونه فرمت پیام ارسالی در شبکه:
```
{"message":"a test message"}
```
## نکات حیاتی:
+ دقت کنید مقادیر نمایش دادهشده در ``ServerActivity`` فاقد هرگونه کاراکتر اضافه باشند زیرا عینا همین مقادیر در ``ClientActivity`` وارد میشوند.
+ هر دو کاربر باید امکان دریافت و ارسال پیام را داشته باشند
+ درصورتیکه به دسترسیای نیاز دارید که در نسخههای جدید اندروید به شکل متفاوتی از کاربر گرفتهمیشود، **حتما** این تفاوت را درنظر بگیرید و تغییرات لازم را برای **زمان شروع برنامه** اعمال کنید.
+ شما مجاز به استفاده از کتابخانههای آماده نیستید و پیادهسازیها باید توسط خودتان انجام شود.
+ برای جلوگیری از بروز خطای حجم فایل ارسالی، قبل از ساخت و ارسال فایل `zip` دقت کنید که پوشههای `build` در این فایل **وجود نداشته باشند**.
ساختار بخشی از فایل پایه بصورت زیر است. میتوانید فایلهایی به پوشه `java` (یا زیر پوشههای آن) اضافه کنید. همچنین مجازید به فایلهایی که با علامت (---->) مشخص شدهاند کدهای خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کدهای موجود نیستید). درنهایت محتویات پوشه `app` را در قالب یک فایل فشرده ارسال کنید.
```
app
│
└───src
└───main
│ AndroidManifest.xml <------
│
├───java
│ └───com
│ └───quera
│ └───messanger
│ └───localmessanger
│ ClientActivity.java <------
│ MainActivity.java <------
│ MessageActivity.java <------
│ ServerActivity.java <------
│
└───res
├───drawable
│
├───drawable-v24
│
├───layout
│ activity_client.xml
│ activity_main.xml
│ activity_message.xml
│ activity_server.xml
│
├───mipmap-anydpi-v26
│
├───mipmap-hdpi
│
├───mipmap-mdpi
│
├───mipmap-xhdpi
│
├───mipmap-xxhdpi
│
├───mipmap-xxxhdpi
│
└───values
colors.xml
strings.xml
styles.xml
```