הפרוטוקול עובר ב- TCP (בחרו את ה- port שלכם. אנחנו נשתמש ב-5678)
מבנה כללי של הודעה ( Message format)
CCCCCCCCCCCCCCCC|LLLL | MMM
C - במבנה הודעה זו 16 תווים של פקודה. תווים של פקודה מציינים את סוג ההודעה (למשל- LOGIN ). שאר התווים שנשארו מ-16 התווים הם תווי רווח ( " " ).
| - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.
L - שדה זה הוא באורך של 4 תווים, המציינים את גודל השדה הבא - שדה ההודעות (M). הערך יהיה בין 0000 ל-9999 (ערך שלילי אינו חוקי).
| - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.
M - מידע המיוצג על ידי תווים. בחלק זה נרשום את ההודעה. ההודעה תכיל את המידע שנרצה להעביר. פקודות מסוימות לא דורשות שדה הודעה (כמו למשל הודעת LOGOUT) ובמקרים כאלה לא נמלא את התווים הללו ושדה זה ישאר ריק.
חלק זה מתאר את ההודעות השונות שניתן להעביר בין הלקוח לשרת, ומהשרת ללקוח.
תיאור ההודעה: בקשת התחברות מהמשתמש
LOGIN : פקודה
מבנה המידע: UUU...#PPP...
U - שם משתמש (username)
# - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.
P - סיסמה (password)
דוגמה להודעה אמיתית בפרוטוקול:
LOGIN |0009|aaaa#bbbb
תיאור: התנתקות מהשרת
LOGOUT : פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית בפרוטוקול:
LOGOUT |0000|
תיאור: קבלת רשימת משתמשים שמחוברים ברגע זה למשחק
LOGGED : פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית בפרוטוקול:
LOGGED |0000|
תיאור: פקודה שמבקשת שאלת טריוויה מהשרת
GET_QUESTION: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית בפרוטוקול:
GET_QUESTION |0000|
תיאור: פקודה ששולחת תשובה לשאלת הטריוויה
SEND_ANSWER: פקודה
מבנה המידע: id#choice
Id: מספר מזהה של שאלת הטריוויה. ערך זה הוא מספרי
# - הפרדה בין חלקי ההודעה. הפרדה זו הכרחית.
choice: התשובה לשאלת הטריוויה. ערך זה הוא מספרי, ומייצג אחת מ-4 תשובות אפשריות לשאלת הטריוויה
דוגמה להודעה אמיתית:
SEND_ANSWER |0003|2#4
תיאור: בקשה לקבלת מצב הנקודות הנוכחי של המשתמש שמחובר כרגע למערכת
MY_SCORE: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית:
MY_SCORE |0000|
תיאור: בקשה לקבלת טבלת ניקוד עם הניקוד הגבוה ביותר מהשרת
HIGHSCORE: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית:
HIGHSCORE |0000|
תיאור: תגובה להודעת LOGIN. שולח הודעה שמשמעותה היא שההתחברות בוצעה בהצלחה
LOGIN_OK: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית:
LOGIN_OK |0000|
תיאור: תגובה להודעה מסוג LOGGED שנשלחת מהלקוח, כוללת את רשימת המשתמשים המחוברים כרגע למשחק הטריוויה
LOGGED_ANSWER: פקודה
username1, username2… :מבנה המידע
כל משתמש שמחובר כרגע- פרטיו נשלחים. שמות המשתמשים מופיעים בשרשור עם הפרדה של פסיק ', ' בין השמות.
דוגמה להודעה אמיתית:
LOGGED_ANSWER |0012|user1, user2
תיאור: תגובה להודעת 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
תיאור: תגובה להודעת SEND_ANSWER. מציין שהתשובה לשאלה הייתה נכונה
CORRECT_ANSWER: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית:
CORRECT_ANSWER |0000|
תיאור: תגובה להודעת SEND_ANSWER. מציין שהתשובה לשאלה אינה נכונה
WRONG_ANSWER: פקודה
מבנה המידע: answer
answer: ערך מספרי המציין את מספר התשובה הנכונה
דוגמה להודעה אמיתית:
WEONG_ANSWER |0001|2
תיאור: תגובה להודעת MY_SCORE. שולח את הניקוד של המשתמש המחובר כרגע
YOUR_SCORE: פקודה
מבנה ההודעה: score
score: ערך מספרי המייצג את הניקוד הנוכחי של המשתמש
דוגמה להודעה אמיתית:
YOUR_SCORE |0001|5
תיאור: תגובה להודעת 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_msg
error_msg: מחרוזת המתארת את השגיאה. הערך הזה יכול להיות מחרוזת ריקה
דוגמה להודעה אמיתית:
ERROR |0014|Error Occured!
תיאור: תגובה להודעת GET_QUESTION. מציינת שאין יותר שאלות זמינות ולכן המשחק נגמר (GAME OVER)
NO_QUESTIONS: פקודה
מבנה המידע: ריק
דוגמה להודעה אמיתית:
NO_QUESTIONS |0000|
בפרוטוקול יש את המצבים הבאים:
במצב זה של התנתקות, אין תקשורת בין הלקוח לשרת
במצב זה, ה-SOCKET של הלקוח מחובר לשרת, אבל הלקוח עדיין לא התחבר (logged in)
ההודעה היחידה שהלקוח יכול לשלוח במצב זה היא הודעה להתחבר- LOGIN message
ההודעה שהשרת יכול לשלוח במצב זה היא הודעת LOGIN_OK כדי לציין שהתחברות בוצעה בהצלחה, או הודעת ERROR כדי לציין שגיאה מכל סוג שהוא.
במצב זה, ה-SOCKET של הלקוח מחובר, והלקוח מחובר LOGGED IN
הלקןח יכול לשלוח כל הודעה במצב זה, חוץ מהודעת התחברות LOGIN
השרת יכול לשלוח כל הודעה במצב זה, חוץ מהודעת LOGIN_OK