תיעוד פרוטוקול

הפרוטוקול עובר ב- TCP (בחרו את ה- port שלכם. אנחנו נשתמש ב-5678)


מבנה כללי של הודעה ( Message format)

CCCCCCCCCCCCCCCC|LLLL | MMM

C   במבנה הודעה זו 16 תווים של פקודה. תווים של פקודה מציינים את סוג ההודעה (למשל- LOGIN ). שאר התווים שנשארו מ-16 התווים הם תווי רווח ( " " ).

|  - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.

L   - שדה זה הוא באורך של 4 תווים, המציינים את גודל השדה הבא - שדה ההודעות (M). הערך יהיה בין 0000 ל-9999 (ערך שלילי אינו חוקי).

|  - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.

M - מידע המיוצג על ידי תווים. בחלק זה נרשום את ההודעה. ההודעה תכיל את המידע שנרצה להעביר. פקודות מסוימות לא דורשות שדה הודעה (כמו למשל הודעת LOGOUT) ובמקרים כאלה לא נמלא את התווים הללו ושדה זה ישאר ריק.


הודעות (Messages)

חלק זה מתאר את ההודעות השונות שניתן להעביר בין הלקוח לשרת, ומהשרת ללקוח.

לקוח -> שרת (Client -> Server)

הודעת LOGIN

תיאור ההודעה: בקשת התחברות מהמשתמש

LOGIN : פקודה

מבנה המידע: UUU...#PPP...

U - שם משתמש (username)

# - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.

P - סיסמה (password)

דוגמה להודעה אמיתית בפרוטוקול:

 LOGIN           |0009|aaaa#bbbb

הודעת LOGOUT

תיאור: התנתקות מהשרת

LOGOUT : פקודה

מבנה המידע: ריק

דוגמה להודעה אמיתית בפרוטוקול: 

LOGOUT          |0000|

LOGGED

תיאור: קבלת רשימת משתמשים שמחוברים ברגע זה למשחק

LOGGED : פקודה

מבנה המידע: ריק 

דוגמה להודעה אמיתית בפרוטוקול: 

LOGGED          |0000|


GET_QUESTION

תיאור: פקודה שמבקשת שאלת טריוויה מהשרת

GET_QUESTION: פקודה 

מבנה המידע: ריק 

דוגמה להודעה אמיתית בפרוטוקול: 

GET_QUESTION    |0000|


SEND_ANSWER

תיאור: פקודה ששולחת תשובה לשאלת הטריוויה 

SEND_ANSWER: פקודה

מבנה המידע: id#choice

Id: מספר מזהה של שאלת הטריוויה. ערך זה הוא מספרי

# - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.

choice: התשובה לשאלת הטריוויה. ערך זה הוא מספרי, ומייצג אחת מ-4 תשובות אפשריות לשאלת הטריוויה

דוגמה להודעה אמיתית:

SEND_ANSWER     |0003|2#4


MY_SCORE

תיאור: בקשה לקבלת מצב הנקודות הנוכחי של המשתמש שמחובר כרגע למערכת


MY_SCORE: פקודה

מבנה המידע: ריק

דוגמה להודעה אמיתית: 

MY_SCORE        |0000


HIGHSCORE

תיאור: בקשה לקבלת טבלת ניקוד עם הניקוד הגבוה ביותר מהשרת

HIGHSCORE: פקודה 

מבנה המידע: ריק 

דוגמה להודעה אמיתית:

HIGHSCORE       |0000|


שרת -> לקוח (Server -> Client)

LOGIN_OK

תיאור: תגובה להודעת LOGIN. שולח הודעה שמשמעותה היא שההתחברות בוצעה בהצלחה

LOGIN_OK: פקודה

מבנה המידע: ריק 

דוגמה להודעה אמיתית:

LOGIN_OK        |0000|

LOGGED_ANSWER

תיאור: תגובה להודעה מסוג LOGGED שנשלחת מהלקוח, כוללת את רשימת המשתמשים המחוברים כרגע למשחק הטריוויה

LOGGED_ANSWER: פקודה 

username1, username2…  :מבנה המידע

כל משתמש שמחובר כרגע- פרטיו נשלחים. שמות המשתמשים מופיעים בשרשור עם הפרדה של פסיק  '' בין השמות.

דוגמה להודעה אמיתית:

LOGGED_ANSWER   |0012|user1, user2

YOUR_QUESTION

תיאור: תגובה להודעת GET_QUESTION.שולח שאלת טריוויה למשתמש

YOUR_QUESTION: פקודה

מבנה המידע: id#question#answer1#answer2#answer3#answer4

Id: המספר המזהה (או ערך מספרי אחר) של שאלת הטריוויה

Question: מחרוזת שמייצגת את השאלה (טקסט השאלה)

answer1-answer4: מחרוזת המייצגת את התשובות האפשריות לשאלה

דוגמה להודעה אמיתית:

YOUR_QUESTION   |0026|2#How much is 1+1?#5#6#7#2


CORRECT_ANSWER

תיאור: תגובה להודעת SEND_ANSWER. מציין שהתשובה לשאלה הייתה נכונה

CORRECT_ANSWER: פקודה 

מבנה המידע: ריק 

דוגמה להודעה אמיתית:

CORRECT_ANSWER  |0000|


WRONG_ANSWER

תיאור: תגובה להודעת SEND_ANSWER. מציין שהתשובה לשאלה אינה נכונה

WRONG_ANSWER: פקודה

מבנה המידע: answer

answer: ערך מספרי המציין את מספר התשובה הנכונה

דוגמה להודעה אמיתית:

WEONG_ANSWER  |0001|2


YOUR_SCORE

תיאור: תגובה להודעת MY_SCORE. שולח את הניקוד של המשתמש המחובר כרגע

YOUR_SCORE: פקודה 

מבנה ההודעה: score

score: ערך מספרי המייצג את הניקוד הנוכחי של המשתמש

דוגמה להודעה אמיתית:

YOUR_SCORE      |0001|5


ALL_SCORE

תיאור: תגובה להודעת HIGHSCORE. שולח את טבלת המשתמשים עם הציונים הכי גבוהים.

ALL_SCORE: פקודה 

מבנה המידע: ...user1: score1\nuser2: score2\n

user1: שם המשתמש

score: הניקוד של המשתמש

\n: מפריד בין הציונים השונים

דוגמה להודעה אמיתית:

ALL_SCORE       |0047|bambababy: 5\nabc: 0\ntest: 0\nadmin: 0\nblabla: 0\n


ERROR

תיאור: הודעת שגיאה. כאשר הלקוח מקבל את ההודעה הזאת, החיבור אמור להתנתק

ERROR: פקודה

מבנה ההודעה: error_msg

error_msg: מחרוזת המתארת את השגיאה. הערך הזה יכול להיות מחרוזת ריקה

דוגמה להודעה אמיתית:

  ERROR             |0014|Error Occured!


NO_QUESTIONS

תיאור: תגובה להודעת GET_QUESTION. מציינת שאין יותר שאלות זמינות ולכן המשחק נגמר (GAME OVER)

NO_QUESTIONS: פקודה

מבנה המידע: ריק 

דוגמה להודעה אמיתית:

NO_QUESTIONS     |0000|


מצבי פרוטוקול (Protocol State)

בפרוטוקול יש את המצבים הבאים: 


התנתקות Disconnected

במצב זה של התנתקות, אין תקשורת בין הלקוח לשרת


מחובר Connected

במצב זה, ה-SOCKET של הלקוח מחובר לשרת, אבל הלקוח עדיין לא התחבר (logged in)

ההודעה היחידה שהלקוח יכול לשלוח במצב זה היא הודעה להתחבר-  LOGIN message

ההודעה שהשרת יכול לשלוח במצב זה היא הודעת LOGIN_OK כדי לציין שהתחברות בוצעה בהצלחה, או הודעת ERROR כדי לציין שגיאה מכל סוג שהוא.


Logged-in

במצב זה, ה-SOCKET של הלקוח מחובר, והלקוח מחובר LOGGED IN

הלקןח יכול לשלוח כל הודעה במצב זה, חוץ מהודעת התחברות LOGIN

השרת יכול לשלוח כל הודעה במצב זה, חוץ מהודעת LOGIN_OK