در اینجا به توضیح توابع استفاده شده در پروژه میپردازیم.
در این بخش صفحات متفاوت در یک قالب استفاده میشوند که در ادامه بیشتر با آن آشنا میشوید. توجه کنید در این بخش برای پایدار ماندن صفحه، صفحه هربار پاک شده و دوباره ساخته میشود به همین دلیل برای این که متنی در جای درست در صفحه نمایش داده شود، به جای استفاده از دستورات چاپ خروجی در هر جا، خروجی در یک آدرس ذخیره میشود تا هنگام نمایش صفحه، در ترمینال ظاهر شود.
در این قسمت توابعی که مورد استفاده قسمتهای مختلف کلاینت است پیادهسازی شده است.
قالب کلی صفحات، شامل یک تابع برای بررسی دستورات وارد شده در آن صفحه، تیتر صفحه، و گزینههای موجود در صفحه است.
بخش کلاینت شامل سه صفحهی start، main و chat است که به صفحههای ورود، پروفایل کاربری، و چت هستند.
قبل از شروع برنامه، این تابع صدا زده میشود که وظیفهی آن انجام عملیاتهای اولیه (فعلا تعیین رنگ قسمتهای متفاوت) است.
صفحهی ترمینال را پاک میکند تا دادههای قبلی دیده نشوند.
همان strcpy بی هیچ تفاوتی :)
به کمک این تابع رنگ متن نوشته شده در ترمینال به str تغییر میکند (مقادیر مجاز gray و red و green و yellow و blue و magneta و cyan و white هستند) و در صورتی که bold صفر نباشد، متن نوشته شده بهصورت پررنگ نمایش داده میشود.
رنگ متن نوشته شده در ترمینال را به رنگ عادی برمیگرداند.
به تعداد cnt رشته از ورودیهای انتهایی را به هم میچسباند و حاصل را در res ذخیره میکند.
مطابق روشهای ارائه شده، پیام درون message را برای سرور ارسال میکند.
در این قسمت صفحهها نمایش داده میشوند و به صفحهها ورودی داده میشود.
سه صفحهای که پیشتر به آنها اشاره شد را آماده میکند. (در ادامه به این که هر صفحه چه مراحلی برای آماده شدن طی میکند اشاره خواهیم کرد)
صفحه را پاک کرده و سپس صفحهای که باید نشان داده شود را در صفحهی ترمینال نمایش میدهد.
ورودی را از ترمینال گرفته و به تابع مفسر صفحهای که در ترمینال قرار دارد، تحویل میدهد.
این صفحه همان صفحهایست که قبل از ورود به کاربر نمایش داده میشود.
در این تابع، مقادیر اولیه، نظیر مقادیر گزینههای مختلف و تابع مفسر صفحهی شروع تعیین میشوند.
این تابع بر اساس اولین حرف ورودی کاربر متوجه میشود که کاربر قصد استفاده از کدام گزینه را داشته. در صورتی که کاربر قصد ورود داشته باشد، پس از گرفتن توکن از سرور، مقدار آن را در یک متغیر گلوبال ذخیره میکند و وارد صفحه اصلی میشود. در صورتی که کاربر قصد ثبتنام داشته باشد، اطلاعات را به سرور ارسال کرده و نتیجه را در صفحه نمایش میدهد.
در این تابع نام کاربری و گذرواژه کاربر از هم جدا شده و در قالب گفته شده، برای ورود به حساب، به سرور فرستاده میشود.
این تابع نام کاربری و گذرواژه کاربر را از هم جدا میکند و در قالب گفته شده، برای ثبتنام به سرور ارسال میکند.
این صفحه اجازهی مدیریت حساب را به کاربر میدهد.
در این تابع، مقادیر اولیه، نظیر مقادیر گزینههای مختلف و تابع مفسر صفحهی شروع تعیین میشوند.
این تابع بر اساس اولین حرف ورودی کاربر متوجه میشود که کاربر قصد استفاده از کدام گزینه را داشته. در صورتی که کاربر قصد ایجاد یا ورود به کانال داشته باشد، درخواست کاربر را به سرور ارسال و کاربر را به صفحهی چت منتقل میکند، در صورتی که کاربر قصد خروج از حساب را داشته باشد، پس از ارسال درخواست به سرور، کاربر به صفحهی ابتدایی منتقل میشود.
به سرور درخواست خروج کاربر را ارسال میکند.
به سرور درخواست ورود به کانال را ارسال میکند.
به سرور درخواست ایجاد کانال را ارسال میکند.
در این قسمت به صفحهی چت پرداخته میشود.
در این تابع، مقادیر اولیه، نظیر مقادیر گزینههای مختلف و تابع مفسر صفحهی شروع تعیین میشوند.
این تابع بر اساس اولین حرف ورودی کاربر متوجه میشود که کاربر قصد استفاده از کدام گزینه را داشته. در صورتی که کاربر قضد ارسال پیام، یا مشاهده پیام یا مشاهده کاربران کانال را داشته باشد، درخواست کاربر را به سرور ارسال و نتیجه را نمایش میدهد. و در صورتی که کاربر قصد ترک کانال را داشته باشد، درخواست کاربر را به سرور ارسال و کاربر را به صفحهی اصلی هدایت میکند.
درخواست ترک کانال را به سرور ارسال میکند.
درخواست مشاهدهی کاربران را به سرور ارسال و نتیجه را نمایش میدهد.
درخواست مشاهدهی پیامهای جدید را به سرور ارسال و نتیجه را نمایش میدهد.
پیام کاربر را سرور ارسال میکند.
در ابتدا مقادیر اولیه را تعیین کرده و سپس مدام روند نمایش صفحه و گرفتن ورودی را انجام میدهد.
شامل نامکاربری، گذرواژه، شمارهی کانال، وضعیت آنلاین بودن و آخرین پیام مشاهده شده توسط کاربر.
شامل شماره پیام، کانال پیام، نام نویسنده و محتوای آن است. (از این ساختار فعلا استفاده نشده است)
شامل نام کانال، شمارهی اختصاصیافته به اعضای کانال (به ترتیب ورود به سیستم)، تعداد پیامها و تعداد اعضاست.
مطابق روشهای ارائه شده، سرور را روی پورت ۱۲۳۴۵ در لوکالهاست بالا آورده و مدام منتظر اتصال کلاینت جدید میماند و در صورت اتصال، وظیفه دریافت پیام بر عهده تابع process است.
با ورودی گرفتن یک کلاینت، از کلاینت پس از اتصال، یک پیام دریافت کرده، پس از تفسیر آن را به تابع مربوطه انتقال میدهد و در نهایت خروجی را به کلاینت ارسال میکند.
مدام سرور را راهاندازی میکند (در واقع فقط یک بار راهاندازی میشود که در ادامه خواهیم دید)
عین strcpy.
با ورودی گرفتن یک آدرس رشته، یک تعداد رشتههای دیگر، و رشتههای دیگر رشتههای دیگر را به هم چسبانده و در res آدرس گرفته شده ذخیره میکند.
با ورودی گرفتن یک کاربر، یک توکن تصادفی به او اختصاص میدهد که از حروف کوچک الفبای انگلیسی تشکیل شده است.
با ورودی گرفتن یک کاربر اطلاعات او را در فایل مربوطه در data/Users
ذخیره میکند.
با ورودی گرفتن یک کانال، نام آن را به فایل data/Channels.data
اضافه میکند.
با ورودی گرفتن یک پیام، آن را در محل مربوطه (ر.ک. add_message) اضافه میکند. فعلا از این تابع استفاده نمیشود.
با ورودی گرفتن دو متن (نام کاربری و گذرواژه) ساختار کاربری ایجاد کرده و آن را ذخیره میکند. از این تابع هم فعلا استفاده نمیشود.
با ورودی گرفتن نام کاربری و گذرواژه، در صورت وجود نداشتن آنها کاربر را به `data/Users' در قالب یک فایل شامل نام کاربری و گذرواژه ذخیره میکند و پیام مقتضی را خروجی میدهد.
با ورودی گرفتن نام کاربری و گذرواژه، در صورت صحیح بودن آنها کاربر را به لیست کاربرهای آنلاین اضافه میکند و پیام مقتضی را خروجی میدهد.
با ورودی گرفتن توکن و نام کانال، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، در صورت عدم وجود کانال با نام یکسان، کانال را ساخته و پیام مقتضی را خروجی میدهد.
در ابتدای شروع برنامه، تمام کانالهای قبلی را به برنامه اضافه میکند تا در ادامه لازم به چک کردن چندبارهی فایل مربوط در دیتابیس نباشد.
با ورودی گرفتن توکن و نام یک کانال، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، او را به کانال مربوط و اعضای آن اضافه کرده و پیام مقتضی را خروجی میدهد.
با ورودی گرفتن یک رشته با فرمت متن پیام, توکن
پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، پیام او را در کانال مربوط با استفاده از تابع add_message انتشار میدهد و پیام مقتضی را خروجی میدهد.
با ورودی، گرفتن یک کاربر، یک کانال، و یک متن، در فایل متنیای در آدرس data/Messages
با نام "channel"_"message_id"
به صورت ابتدا نام فرستنده و بعد متن پیام ذخیره میشود.
با ورودی گرفتن یک کانال، و بررسی فایلهای موجود در دیتابیس شمارهی آخرین پیامی که در آن کانال ارسال شده را خروجی میدهد.
با ورودی گرفتن یک رشته، مقدار عدد درون آن رشته را برمیگرداند.
با ورودی گرفتن توکن، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، ابتدا پیدا میکند که چند پیام کانال در دیتابیس ذخیره شده است و سپس از آنجایی که کاربر دیده به بعد را شناسایی کرده و پیام مقتضی را خروجی میدهد.
پیام مربوط به غلط بودن دستور وارده توسط کلاینت را خروجی میدهد.
با ورودی گرفتن توکن، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، کانال او را پیدا کرده و کاربرهای آنلاین آن کانال را (در صورت وجود) پیدا کرده و پیام مقتضی را خروجی میدهد.
با ورودی گرفتن توکن، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، در صورتی که کاربر در کانالی باشد، او را از کانال حذف کرده و پیام مقتضی را خروجی میدهد.
با ورودی گرفتن توکن، پس از پیدا کردن توکن کاربر در میان کاربرهای آنلاین، او را از کانالی که هست خارج میکند، توکنش را از بین میبرد و وضعیتش را آفلاین ثبت میکند و پیام مقتضی را خروجی میدهد.