
הטקסט המלא של הדקות הראשונות בהרצאה «הדגמה של Singleton - חלק 6» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, אז היום אנחנו רוצים לפתור את התרגיל שהגדלנו בשיעור הקודם. אנחנו רוצים שיהיו לנו שלושה ערוצי תקשורת. אז בואו נפתור, בואו ניגש לקוד שלנו. איפה הקוד? יופי.
נעצור את הריצה. אז אמרנו שאנחנו רוצים לבצע שינוי בקומוניקיישן, שלושה ערוצי תקשורת. עד עכשיו היה לנו רק אחד.
אוקיי, אז זה כרגע האינסטנס היחיד שיש לנו, ומה שאנחנו רוצים במקומו זה שלושה ערוצי תקשורת. זה מה שאנחנו נעשה פשוט נגדיר שלוש שדות כאלו אחד יהיה אינסטנס מטא אחד יהיה אינסטנס אודיו אחד יהיה אינסטנס וידאו ובאופן מקביל אנחנו רוצים אינסטנס מטא פרופרטי וכאן אינסטנס מטא אז אם אינסטנס מטא שווה
לנעל אני רוצה להקצות אינסטנס מטא חדש ואני מחזיר את אינסטנטס מטא. יפה, זה עבור אינסטנטס מטא. אותו דבר אני חייב עבור השניים האחרים.
אני לא רואה פתרון אחר, לא עולה בדעתי פתרון אחר. זאת אומרת, תיאורטית אני יכולתי להגדיר כאן מערך, ואז לכאורה הקוד יהיה יותר טוב.
הבעיה עם מערך זה שמערך בעצם בא להגיד שאני לא יודע מראש את כמות הפריטים במערך. כאן, אחרי זה נעשה אולי תרגיל שמערב מערך, כרגע נפתור את זה בלי מערך. יש יתרונות וחסרונות למערך.
לכאורה, נכון, במערך אני יכול לגשת לתא שלא הקציתי, ואז מה קורה? אז אני צריך תמיד לבדוק בזמן ריצה, ועלולות להיות חריגות, אז יש חיסרון במערך כי הוא גמיש, אבל בגלל שהוא גמיש אז יש גם יתרון.
כרגיל אין ארוחות חינם תמיד משהו בא בתמורה למשהו אז בפתרון הזה אנחנו נעבוד עם שלושה משתנים שונים עבור כל ערוץ אחד עבור כל ערוץ ולכן אנחנו חייבים לשכפל את הפונקציה הזו אז זה פעם אחת זה פעם שנייה וזה פעם שלישית אז זה הראשון עבור מטא בשני אנחנו נסמן את זה ונעשה קונטרול h והמילה מטא נחליף אותה עם המילה אודיו פה נראה סביר אז בסלקשן אפשר לעשות
match case אבל לא match all word וreplace all יופי ואותו דבר לגבי המטא הזה במקום אודיו נחליף את זה עם וידאו ובסלקשן replace all יופי זה שינוי אחד שינוי שני שרצינו לבצע בואו נשמור שינוי שני שרצינו לבצע אוקיי גומוניקיישן זה בסדר אמרנו שאין דבר כזה יותר לוגין ולוגאוט ויש רק פונקציה אחת send packet אז בואו נגדיר public void
send packet אם זו ארכיטקטורה קצת שונה וsend packet cw מקבלת פרמטר string packet ופה אני פשוט אדפיס פאקט, לכאורה הפאקט נשלח מתוך ה-communication, פאקט, פשוט פאקט send.
יופי, אז אנחנו לא נמשיך לעבוד עם פונקציית לוג אין, ולא לוג אאוט, ולא send video, ולא send audio, זה חלק מהשינוי שהתבקשנו לעשות, וזה שינוי הגיוני, כי אחרת אנחנו, אחרת מה אנחנו אומרים?
שבעצם יש לנו שלוש קלאסים שונים, אחד שולח אודיו, אחד שולח וידאו ואחד שולח מטה, אז יש להם פונקציות שונות, שזו ארכיטקטורה שונה.
זה גם יכול לקרות תרחיש שכזה, אבל כרגע אנחנו שינינו את הדרישות וככה המערכת תעבוד. זה סביר, זו התנהגות סבירה.
אוקיי, אז אם נעשה עכשיו F6 ו-F8, בואו נראה את השגיאות שיש לנו. אז מתוך החלון הראשי, Communication Instance, אין לנו יותר Communication Instance, יש לנו מטה.
עכשיו למטה אין לוגין, מה שאנחנו תמיד קוראים זה לפונקציה האחת והיחידה sendPacket ופשוט מעבירים לה את המילה לוג-אין, זה הרעיון.
אותו דבר לגבי לוג-אאוט, אז ב-communicationInstanceMeta אנחנו פונים לפונקציה sendPacket ומעבירים לו את המילה לוג-אאוט. יפה.
עדיין, כן, מתוך החלון הראשי, אם המשתמש לוחץ על Start Audio Recorder אז זה לא משתנה, את זה לא שינינו. אם נעשה F6, F8, F6 זה בילד ו-F8 עובר לשגיאה הראשונה.
F8, למעשה אלה השגיאות שמופיעות פה למטה, אז ב-F8 אני פשוט עובר ביניהן. אז Communication Instance, אני כרגע באודיו, רקורדר, אז אני מפעיל את האודיו, ולאודיו יש רק פונקציה send packet, ואז אני מעביר רק את המילה audio packet.
אולי אפילו את המילה audio לא צריך, כי נכון כי בקומיוניקיישן F12 אני יכול פשוט פה להוסיף את המילה פאקט כי תמיד אני שולח פאקט חבילה אז במיין ווינדאו כשאני אומר לו לוג אין אז יפה אז אני רק אומר לו לוג אין לוג אאוט מצוין.
ונחזור שוב לאודיו רקורדר אז בסטארט אודיו רקורדר אני מדפיס סטארט אודיו רקורדר invoked ואני מדבר עם רכיב או עם האינסטנס אודיו. אובייקט כן הסינגלטון האחד והיחיד זה רכיב האודיו רכיב תקשור זה ערוץ האודיו למעשה זהו ערוץ אפשר גם לקרוא לזה אודיו צ'אנל אולי עכשיו זה שם יותר הגיוני אודיו צ'אנל F12 אז אינסטנס
אודיו בואו נשנה אותו לאודיו צ'אנל אלט שיפט F10 אנטר אלט שיפט F10 אנטר ואת אינסטנס אודיו שזה משתנה מקומי נשנה גם לאודיו צ'אנל. אבל פה צריך לשנות זה לאודיו צ'אנל אלט שיפט F10 אנטר.
ניקח את המילה צ'אנל זה יהיה מטה אלט שיפט F10 אנטר ווידאו צ'אנל אלט שיפט F10 אנטר ואינסטנס מטה אנחנו קוראים לו מטה צ'אנל אלט שיפט F10 אנטר מטה צ'אנל אודיו צ'אנל ווידאו צ'אנל.
זה יהיה וידאו צ'אנל ווידאו צ'אנל F6. F8 אז בוידאו עדיין לא תיקנו את זה אין לנו יש לנו אין לנו אינסטנס יש לנו וידאו צ'אנל וידאו צ'אנל נקודה רק פונקציה אחת send packet ואז אני רק מעביר את המילה וידאו זהו F5 נקטין את זה נזיז את זה לוגין Communication Constructor Invoked, אם אני אגיד לו לוג אאוט, אז זה מצוין,
רק אין רווח, בואו נוסיף את הרווח ב-Communication בסנד פאקט, פה חסר רווח, אז נשים כאן breakpoint, הוא לא ייתן לי כרגע לשנות, נכון? אז יש טריק, אני פשוט פונה ללוגין, מגיע לברקפוינט, ואז הוא כן נותן לי לשנות.