יש כאן טיפול בשלוש שכבות
הראשונה ויזואלית והשניה לוגית. שכבה ויזואלית : כוללת הצגת הכלים והשולחן ומתן אפשרות לשחקן להניע את הכלים. כל תנועה של שחקן צריכה להשלח לשכבה הלוגית אשר תבדוק אם התנועה חוקית, תשמור אותה ותעדכן את היריב. השלב הזה די פשוט הוא דורש HTML ו DHTML בכדי להניע כלים. בכדי להשתמש בשכבה הלוגית ניתן לקרוא לארוע שלך בצד שרת אשר יחזיר תמונה מעודכנת או לחילופין אם כל התחנות משתמשות ב Explorer ניתן להשתמש ב XMLHTTP ולחסוך שליחת כל הדף מהשרת לתחנה. הבעיה העקרית בשכבה זאת היא העדכון האוטומטי של היריב משום שלא ניתן ליזום עדכון של תחנה משרת. בכדי לדעת שהיה שינוי בשרת (יריב זז) צריך ליזום שאילתה לשרת כל פסק זמן מסוים לבדוק את הסטטוס בשרת (האם היריב זז) ולעדכן את הדפדפן. ניתן להשתמש ב Meta tag (http equiv) בכדי ליזום Refresh אוטומטי של הדף כל שניה, לבדוק את המצב בשרת (נטפל בזה בשכבה הלוגית) ואם יש צורך להחזיר HTML חדש שייצג את תזוזת היריב. אם כל התחנות הם IE ניתן שוב להשתמש ב XMLHTTP ולמנוע הבהובים של השולחן. שכבה לוגית וגם נתונים : הבסיס כאן הוא ה Session ID שכל שחקן מקבל. כאשר שני שחקנים מתחילים משחק אתה צריך לשמור את ה SessionID שלהם במקום מרכזי (משותף לשניהם) לדוגמה DataSet ב Application. ה Dataset יכיל מספר טבלאות אשר יכילו מי משחק נגד מי ומה היו התנועות שלהם. והנה נולדה שכבה שלישית - שכבת נתונים. כל תנועה של משחק מגיעה לדף אשר שולח את התנועה (מקור,יעד ו SessionID) ל Assembly אשר מכיל לוגיקה. ה Assembly בודק ראשית את חוקיות התנועה תוך כדי שימוש בשכבת הנתונים (מיקומי יריב). אם הפעולה חוקית היא מבוצעת תוך כדי עדכון שכבת הנתונים ב מיקום החדש וסימון אינדיקציה כי פעולה בוצעה. כל Refresh אשר נועד לבדוק אם היריב ביצעה פעולה מגיע גם לדף אשר שולח לשכבת הלודיקה את ה SessionID של המשתמש. שכבת הלוגיקה משתמשת בשכבת הנתונים לבדוק אם היריב ביצע שינוי ומה השינוי ומחזירה אינדיקציה לדף אשר מחזיר HTML בהתאם (לא לשכח לאפס את האינדיקטור של השינוי) זהוא, מקווה שעזרתי