شنبه ۶ خرداد ۱۳۹۶
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 C# 5.0: كنفرانس Build و نامي جديد در نگارش بعدي، WinRT!
.NET C# WinRT/Windows 8
تاریخ ثبت:  ۹۰/۷/۱۱
تعداد نمایش:  ۹۴۸۸
  نویسنده: ابوالفضل حسن الدين
 
   ۳۴  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share




دقيقا يك سال پيش! نخستين مقاله از سري سي شارپ 5.0 منتشر شد. مقاله مذكور تحليل اوليه و پيش بيني ويژگي هاي نسخه بعدي سي شارپ بر مبناي اطلاعات موجود در آن مقطع زماني بود. پس از كنفرانس PDC 2010، تصوير سي شارپ 5.0 تكميل تر شد و برنامه نويسي غيرهمزمان به عنوان يك ويژگي جديد در كنار نسخه ي بعدي زبان هاي دات نت از جمله سي شارپ قرار گرفت. اين مبحث طي دو مقاله مفصل (مقاله اول، مقاله دوم) مورد بحث و بررسي قرار گرفت.

يكي از ويژگي هاي جالب و بحث برانگيز كه نخستين بار در PDC 2008 توسط آندرس هلسبرگ مطرح شد، سرويس كامپايلر سي شارپ بوده است. در اين حوزه، كامپايلر از يك مفهوم بسته (با ورودي و خروجي مشخص) خارج شده و با در اختيار قرار دادن API كامپايلر، مي توان وظايفي را كه كامپايلر برعهده دارد، مستقيما از طريق كد انجام داد. تاكنون اين ويژگي با ارائه پيش نمايشي از سوي مايكروسافت همراه نبوده است و طي اين مقاله، سرويس كامپايلر Mono به صورت كاملا عملي با نمونه كدهاي واقعي در وب سايت بررسي شد.

كنفرانس Build مايكروسافت كه چندي پيش برگزار شد، اولين رونمايي رسمي از سيستم عامل بعدي مايكروسافت يعني ويندوز 8 بوده است. نكته جالب اينكه اين پيش نمايش براي عموم استفاده كنندگان آن نبوده است. بلكه برنامه نويسان و توسعه دهندگان مخاطب اصلي آن بودند. عنواني كه مايكروسافت براي اين كنفرانس انتخاب كرده است نيز خود گوياي اين امر مي باشد. طي چند خبر در وب سايت (1،2،3) اين رويداد بزرگ با دست آوردهاي آن منعكس شد.

مايكروسافت اعلام كرده است كه ويندوز هشت به اندازه اي باعث ايجاد تحول خواهد شد كه آخرين بار ويندوز 98! در دوران ارائه خود اين تحول را ايجاد كرده است. كنفرانس Build نيز ثابت كرده است كه اين ادعا بي ربط نبوده است. اما براي پي بردن به اين تحول عظيم لازم است تاريخچه مختصري از برنامه نويسي ويندوز ارائه شود.


عصري كه به تاريخ مي پيوندد... دوران ماقبل ويندوز 8!

آيا نگارش هاي اوليه سيستم عامل ويندوز مايكروسافت را به ياد مي آوريد؟ شايد ويندوز 98 اولين تصوير شما از سيستم عامل ويندوز باشد. سيستم عامل به عنوان يك سرويس دهنده كه تمامي برنامه ها و سرويس ها در بستر آن اجرا مي شوند، مي بايست پلتفرمي براي توسعه و ارائه اين برنامه ها و سرويس ها را نيز ارائه دهد. يعني مجموعه اي از كتابخانه ها كه از طريق زبان هاي برنامه نويسي بتوان نرم افزار و يا سرويس مورد نظر  را ايجاد كرد. در تاريخچه سيستم عامل ويندوز كتابخانه ها و تكنولوژي هاي زيادي جهت نيل به اين هدف ديده مي شوند. Win32 API يكي از مهم ترين اين كتابخانه محسوب مي شود. پيچيدگي استفاده مستقيم از اين كتابخانه ها و نيز پراكندگي تكنولوژي ها و زبان ها، همواره مايكروسافت را به ارائه يك راه حل جامع و يكپارچه جهت برنامه نويسي ويندوز سوق مي داد. به عنوان مثال (Component Object Model (COM نمونه اي از كارهايي صورت گرفته در اين راستا مي باشد.

مايكروسافت حدود ده سال پيش با ارائه پلتفرم دات نت و كتابخانه دات نت فريم ورك موفق شد گامي بزرگ و همه جانبه براي حل مشكل برنامه نويسي ويندوز بردارد. اين پلتفرم بستري يكپارچه و استاندارد با مجموعه اي از زبان ها و كتابخانه هاي غني ارائه كرد. امكان توسعه اپليكيشن هاي ويندوزي و وب راحت تر از هميشه ميسر شد. در حقيقت دات نت فريم ورك با در بر گرفتن كتابخانه هاي ذاتي و بومي ويندوز (Win32 API) و اجرا كدها در محيطي امن با تضمين كيفيت و پايداري (CLR)، ساده سازي بزرگي در دنياي برنامه نويسي انجام داد.

هر چند پلتفرم دات نت بسياري از مسائل را ساده كرد، اما همواره بحث ها و چالش هاي زيادي در طول عمر ده ساله ي آن وجود داشته است. تعدد نسخه هاي ارائه شده در طول اين سال ها و در نتيجه ايجاد كيك! چند لايه دات نتي از جمله اين مباحث بوده است. نكته ديگر اينكه همواره بين ويندوز و دات نت فريم ورك شكاف عميقي وجود داشته و عملا نمي توان دات نت فريم ورك را جزئي از ويندوز و همرنگ با آن تلقي كرد. اين شكاف در نسخه هايي مانند ويندوز XP بيشتر و در نسخه هاي اخير يعني ويندوزهاي ويستا و 7 كمتر به چشم مي خورد.


ويندوز 8، فرصتي براي مايكروسافت، آغاز تحول و دگرگوني

علاوه بر مسائل برنامه نويسي و توسعه بر روي پلتفرم ويندوز، معيارها و فاكتورهاي ديگري نيز وجود دارند كه روند تحول اين سيستم عامل را تحت تاثير خود قرار مي دهند. نحوه استفاده از سيستم عامل و يا به عبارتي سخت افزاري كه سيستم عامل بر روي آن اجرا مي شود، يكي از اين معيارهاي مهم و حياتي ست. چند سال اخير با رشد چشم گير تبلت ها و نت بوك ها همراه بوده است. در اين عرصه مايكروسافت تا حدودي آسيب پذير نشان داد و عملا ويندوز 7 كه بهترين سيستم عامل حال حاضر مايكروسافت محسوب مي شود، جهت استفاده در تبلت ها گزينه مناسبي محسوب نمي شود.

با توجه به تمامي محدوديت ها و مسائلي كه عنوان شد مي توان نتيجه گرفت كه مايكروسافت پس از حدود ده سال اين فرصت را پيدا كرده است كه با ايجاد تغييرات بنيادي در ساختار سيستم عامل و پوشش حداكثري شكاف ها، تحولي شگرف در تاريخ سيستم هاي عامل خود رقم بزند. حال مي توان پي برد كه ويندوز 8 با تغييرات اساسي خود يقينا تاثيرگذارتر از ويندوز 98 در عصر خود خواهد بود!


كنفرانس Build، آغاز اطلاع رساني و آماده سازي جامعه برنامه نويسي

طبق برنامه ريزي انجام شده كنفرانس Build، با رونمايي از سيستم عامل ويندوز 8 تحت عنوان Developer Preview، جامعه برنامه نويسي را به عنوان اولين مخاطب خود قرار داد. دليل آن هم كاملا واضح است. نوآوري ها بيش از اندازه زيادند و چرخ اصلي سيستم عامل توسط جامعه برنامه نويسي گردانده مي شود. Build موجي از محصولات جديد به همراه داشت. پيش نمايش نسخه بعدي ويژوال استوديو تحت عنوان ويژوال استوديو 2011، پيش نمايش Team Foundation Server تحت عنوان TFS 2011 و پيش نمايش دات نت فريم ورك 4.5 به عنوان عناصر اصلي پلتفرم دات نت از جمله اين محصولات بودند. در كنار اين عناوين معروف و مطرح، عناويني كاملا تازه و جديد نيز معرفي شدند. واسط كاربري جديد استايل مترو (Metro) و Windows RunTime به اختصار WinRT كه براي اولين بار همراه ويندوز 8 ارائه خواهند شد.


فسانه گشت و كهن شد حديث سكندر (واسط كاربري دسكتاپ)  سخن نو آر كه نو را حلاوتي ست دگر (واسط كاربري مترو)!

همانطور كه اشاره شد، روند چشم گير افزايش كاربري تبلت ها طي چند سال اخير، باعث غافل گير شدن غول نرم افزاري و عقب افتادن از ميدان رقابت تجاري اين حوزه شد. هر چند ويندوز 7 يكي از بهترين سيستم هاي عامل حال حاضر در جهان محسوب مي شود، اما براي استفاده در تبلت ها گزينه مناسبي نيست. چرا كه طراحي واسط كاربري آن متناسب با اين طيف از سخت افزار نمي باشد. مايكروسافت كه هميشه از شكست ها عبرت مي گيرد (به عنوان مثال پس از ارائه ناموفق ويندوز ويستا و جبران آن با ويندوز 7) اينك تمام عيار وارد عرصه رقابت شده است. سيستم عامل ويندوز 8 با حفظ واسط كاربري فعلي خود كه از اين به بعد كلاسيك! ناميده خواهد شد، واسط كاربري جديدي به نام مترو ارائه خواهد كرد كه براي صفحه هاي نمايش لمسي و تبلت ها گزينه اي بسيار مناسب و در عين حال كارآمد محسوب مي شود. از آنجايي كه صحبت از واسط كاربري كاملا جديد و متفاوت با قبل است، بنابراين بايد زيرساخت اجرايي اين واسط كاربري يا به عبارتي اپليكيشن هاي مبتني بر واسط كاربري مترو نيز جديد و متفاوت با ساختارهاي فعلي ويندوز باشد. اين ساختار همان WinRT ست. متاسفانه تحليل هاي نادرست و غلطي كه پس از كنفرانس محافل برنامه نويسي را در بر گرفت باعث ايجاد سردرگمي و ابهامات بسيار شد كه در ادامه با توصيف خلاصه و ساده سعي بر آن است تاحدودي از اين ابهامات برطرف شود.


Windows RunTime يا به عبارتي WinRT چيست؟

WinRT محيط اجرايي ويندوز 8 براي اپليكيشن هاي كلاينت سبك مترو مي باشد.WinRT در حقيقت مجموعه اي كاملا جديد از API با ساختاري شيء گرا و شبيه به دات نت است كه به صورت native (با ++C) بازنويسي شده اند و پس پرده از Win32 API بهره مي برند. برخي از ويژگي WinRT عبارت اند از:
  • كد managed شده نيست و هيچ ارتباطي با دات نت فريم ورك ندارد.
  • بر مبناي تكنولوژي COM نوشته شده است و تمامي ساختارهاي رايج COM از قبيل IUknown را مورد استفاده قرار مي دهد.
  • امكان برقراري ارتباط با آن از طريق اغلب زبان ها از جمله زبان هاي دات نتي و نيز جاوا اسكريپت فراهم مي باشد.
  • اپليكيشن هاي نوشته شده با دات نت مي توانند بر روي WinRT اجرا شوند.
  • API آن قابل توسعه بوده و مي توان SDK آن را در اين راستا مورد استفاده قرار داد.
نكته: WinRT بستري براي ايجاد اپليكيشن هاي سبك مترو در حوزه كلاينت مي باشد. از طريق دات نت نيز مي توان براي اين بستر برنامه نويسي كرد فلذا نه تنها اين دو منافاتي با هم ندارند بلكه از نظر ساختار بسيار شبيه به هم هستند. تفسيرهايي از قبيل اينكه دات نت فريم ورك در نسخه هاي بعدي ويندوز حذف خواهد شد! كاملا منتفي مي باشد. از طرفي سناريوهاي سمت سرور براي ايجاد اپليكيشن ها كاملا مبتني بر پلتفرم دات نت بوده و نقش ساختارهايي از قبيل WCF پررنگ تر از قبل نيز خواهد شد.

براي درك بيشتر پلتفرم توسعه ويندوز 8 و ابزارهاي آن، به اين تصوير كه در كنفرانس Build ارائه شد دقت كنيد.



همانطور كه مشاهده مي كنيد، WinRT تنها در بخش اپليكيشن هاي سبك مترو قرار گرفته و زيربناي توسعه در اين حوزه به شمار مي رود. از طريق طيفي از تكنولوژي ها و زبان هاي برنامه نويسي از جمله زبان هاي دات نتي مي توان اپليكيشن هاي اين حوزه را توسعه داد. در سناريوي كلاسيك دسكتاپي همه چيز روال سابق خود را دارد. عده اي معتقدند كه اين تصوير منعكس كننده واقعي تمامي ساختارهاي توسعه ويندوز 8 نبوده و باعث ايجاد ابهام نيز مي شود. مطالعه اين مطلب جهت بررسي عميق تر پلتفرم توسعه ويندوز 8 توصيه مي شود.


جايگاه نسخه بعدي سي شارپ و زبان هاي دات نتي در ويندوز 8 كجاست؟

پس از اين مقدمه نسبتا طولاني! كه براي آغاز بحث اصلي مقاله ضروري بود، نوبت به بررسي ويژگي ها و جايگاه #C پس از نوآوري هاي كنفرانس Build مي رسد. كنفرانس Build با ارائه ديدني و بسيار جالب آندرس هلسبرگ تحت عنوان Future Directions for C# and Visual Basic همراه بوده است كه بحث هاي پيش رو همه مبتني بر اين ارائه خواهند بود.

روند تكاملي سي شارپ طي ده سال اخير مطابق تصوير زير بوده است.



در اين تصوير كه هلسبرگ در ارائه خود به آن اشاره كرده است، به خوبي نام جديد WinRT در كنار C# 5.0 ديده مي شود. به عبارت ديگر نسخه هاي بعدي دات نت امكان برنامه نويسي و ارتباط با پلتفرم WinRT ويندوز 8 را فراهم خواهند كرد. نام ديگري كه در اين بين ديده مي شود، Asynchrony يا به عبارتي غيرهمزماني در برنامه نويسي ست كه طي PDC 2010 مطرح شد. (مقاله اول، مقاله دوم) قطعه كد زير به عنوان يادآوري از نحوه عمكرد برنامه نويسي غيرهمزمان ارائه مي شود.



از آنجايي كه ويندوز 8 واسط كاربري مترو را ارائه مي دهد، بنابراين مقوله پاسخ دهي بسيار بالا به درخواست هاي كاربر بدون لحظه اي وقفه و درنگ از اهميت حياتي برخوردار مي باشد. برنامه نويسي غيرهمزمان اين امكان را فراهم مي كند كه اجرا براي سناريوهايي كه پاسخ دهي نيازمند صرف زماني بيشتر از حد معمول ست، منتظر پاسخ نبوده و واسط كاربري پاسخ دهي منظم و عادي خود را ادامه دهد. در نتيجه پس از حصول نتيجه بلافاصله اجرا به محل فراخواني بازگشته و روند به روال قبلي بازمي گردد. غيرهمزماني نه تنها در زبان هاي دات نت بلكه در WinRT و حتي جاوا اسكريپت نيز لحاظ شده است! طراحي ساختارهاي WinRT به گونه اي انجام شده است كه در صورتي كه يك فراخواني بيش از 50 ميلي ثانيه طول بكشد، به صورت خودكار به فراخواني غيرهمزمان تبديل مي شود. غيرهمزماني در اين سه حوزه از طريق ساختارهاي زير قابل استفاده مي باشد:
  • <Windows Runtime: IAsyncOperation<T
  • <NET Framework: Task<T
  • Javascript: Promises
اگر به تصوير Windows 8 Platform and Tools مجددا نگاه كنيد، در حوزه سبك مترو جاوا اسكريپت را هم سطح با زبان هاي دات نت مانند #C و VB خواهيد يافت. پس WinRT بايد به گونه اي امكان ارتباط بين اين زبان ها را فراهم كند. شايد باور كردن اين مطلب سخت و يا هيجان انگيز! باشد كه در پلتفرم WinRT امكان فراخواني كتابخانه هاي دات نتي از طريق جاوا اسكريپت فراهم شده است! براي اين منظور كافيست كتابخانه خود را با فرمت ديگري كامپايل كنيد. اين فرمت WinMD file مي باشد كه كتابخانه هاي دات نت را به فرمت قابل استفاده براي WinRT تبديل مي كند. پس از اينكه پروژه موفقيت آميز كامپايل شد مي توان WinMD خروجي را در پروژه جاوا اسكريپت به جمع referenceهاي پروژه اضافه كرد. جالب است بدانيد كه هنگام استفاده از كتابخانه اضافه شده تمامي ساختار آن در جاوااسكريپت با intellisense در اختيار خواهد بود! اين مقوله در دموي هلسبرگ تحت عنوان Hybrid C#/VB and Javascript applications مطرح شده است.


C# 5.0 و Caller Info attributes

يكي از ويژگي هاي جديد نسخه بعدي سي شارپ كه هلسبرگ فقط به آن اشاره كرد، مجموعه از صفت هاي (attributes) ديباگ مي باشد. در زبان هاي C و ++C اين ويژگي به صورت ماكروهاي __FILE_ و __LINE__ هميشه در دسترس بوده اند. اما به دليل اينكه معماري زبان سي شارپ قابليت استفاده از ماكرو ها را به شكلي كه در C و ++C استفاده مي شوند، ندارد، توسعه دهندگان سي شارپ قادر به استفاده از اين ويژگي نبوده اند. چرا در نسخه 5.0 اين صفت ها قابل دسترس خواهند بود؟ پاسخ اين سوال در نحوه پياده سازي آنها در سي شارپ نهفته است. در حقيقت اين صفت ها به عنوان آرگومان هاي اختياري توابع قابل استفاده خواهند بود كه آرگومان هاي نامي و آرگومان هاي اختياري در نسخه 4.0 سي شارپ ارائه شده اند (در حقيقت اين ويژگي پيش نياز بوده است). صفت هاي Caller Info عبارت اند از:
  • CallerFilePath : مسير فايل سورس فراخواني شونده
  • CallerLineNumber : شماره خط كد فراخواني شونده
  • CallerMemberName  : نام عضو فراخواني شونده
اين كد فرضي نحوه استفاده از صفت ها را نشان مي دهد:



همانطور كه مشاهده مي شود، اين صفت ها بيشتر براي ديباگ جهت كسب اطلاعات جانبي مفيد مي باشند. يك ايده خوب و كارامد براي استفاده از صفت هاي ارائه شده در اين پست مطرح شده است.

Roslyn، پايان وعده و وعيدها! پروژه كامپايلر سرويس مايكروسافت در راه است

شايد مهم ترين بخش ارائه هلسبرگ، اعلام آماده شدن نسخه CTP پروژه كامپايلر سرويس زبان هاي سي شارپ و ويژوال بيسيك بوده است. اين پروژه كه نام كد Roslyn را يدك مي كشد قرار است اواسط ماه اكتبر 2011 (يك ماه پس از ارائه هلسبرگ) منتشر شود. هلسبرگ زمان قطعي انتشار نهايي اين پروژه را مشخص نكرد. همانطور كه در پيش گفتار هم اشاره شد مقوله كامپايلر سرويس سي شارپ تاكنون طي دو مقاله در وب سايت مورد بررسي قرار گرفته است. مقاله مفصلي كامپايلر سي شارپ Mono را مورد تحليل قرار داده است. مطالعه آن براي كساني كه با اين مبحث آشنا نيستند توصيه مي شود.

آنچه از دمو و نمايش هلسبرگ برمي آيد، مايكروسافت در اين حوزه بسيار قوي تر از Mono عمل كرده است. به اسلايدي كه در اين خصوص ارائه شده است دقت كنيد.



اگر خط Compiler Pipeline مجموع اي از فرآيندهايي باشد كه يك كامپايلر براي تبديل سورس كد به پيمانه اجرايي انجام مي دهد، خط Compiler APIs بيانگر حوزه هايي ست كه كامپايلر راسلين براي آنها API ارائه مي دهد. در نهايت اين APIها در خط Language Service به صورت جزئي تر نمايش داده شده اند.

يكي از دست آوردهاي جالب و مهم اين سرويس تبديل راحت و بي درد سورس كدهاي سي شارپ به ويژوال بيسيك و بالعكس مي باشد! اگر كد سي شارپ را در پروژه اي سي شارپ كپي كنيد، مي توانيد در پروژه ويژوال بيسيك از طريق گزينه Paste as VB Code آنرا با فرمت كد ويژوال بسيك به پروژه اضافه كنيد! ممكن است با توجه به ماهيت ويژوال بيسيك برخي ساختارها تغيير كنند ولي منطق كد و خروجي حاصل از آن تغييري نخواهد كرد. (به عنوان مثال ساختار for با while جايگزين شود).


منابع براي مطالعه بيشتر

براي درك كامل مطالب اين مقاله توصيه مي شود كه ويدئوهاي ارائه آندرس هلسبرگ در كنفرانس Build و سوال و پاسخ را ملاحظه فرماييد.

لينك هاي مفيد


كلام آخر

كنفرانس Build مايكروسافت كه با رونمايي اوليه ويندوز 8 همراه بود، روند تكامل زبان هاي دات نت از جمله نسخه C# 5.0 را تا حدودي كامل تر كرد. پس از ارائه آندرس هلسبرگ مي توان جمع بندي زير را در مورد ويژگي هاي نسخه ي بعدي سي شارپ انجام داد.



در حال حاضر امكان ارائه عملي اين ويژگي ها به خاطر پيش نمايشي بودن آنها ميسر نيست. اما Persia Developers مثل هميشه در صدد است اولين مرجع پارسي زبان معرف ويژگي هاي جديد باشد.

از همراهان گرامي، همكاران عزيز و خوانندگان ارجمند وب سايت، خواهشمند است ما را از نكته نظرات و پيشنهادات خود جهت ارائه مقالات بعدي بهره مند سازند. (اين بند از مقالات به يك بند ويتريني بي اثر! تبديل شده است... صد افسوس)

به عنوان 2000 امين امتياز كسب شده در وب سايت پس از چهار سال تلاش و كوشش مؤلف، اين امتياز تقديم مي شود به همه دست اندركاراني كه در راستاي بهبود و ارتقاء محتواي برنامه نويسي پارسي زبان  شبانه روز زحمت مي كشند

( هر گونه استفاده از مقالات اختصاصي PersiaDevelopers منوط به درج منبع و نام نويسنده بلامانع مي باشد.)

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
ابوالفضل حسن الدين
On my own in the programming world
همه مقاله های نوشته شده توسط این کاربر (۲۵)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۸ از مجموع ۸ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
تشکر شروین قاسملو ۱۳۹۰/۸/۱۶
پاسخ به: تشکر ابوالفضل حسن الدين ۱۳۹۰/۸/۱۶
 
ممنون کاوش حسینی ۱۳۹۰/۸/۲
پاسخ به: ممنون ابوالفضل حسن الدين ۱۳۹۰/۸/۲
 
نقش سیلورلایت فربد صالحی ۱۳۹۰/۷/۱۳
پاسخ به: نقش سیلورلایت ابوالفضل حسن الدين ۱۳۹۰/۷/۱۳
پاسخ به: نقش سیلورلایت فربد صالحی ۱۳۹۰/۷/۱۳
پاسخ به: نقش سیلورلایت ابوالفضل حسن الدين ۱۳۹۰/۷/۱۳
 
سپاس مهدي رحمتي ۱۳۹۰/۷/۱۲
پاسخ به: سپاس ابوالفضل حسن الدين ۱۳۹۰/۷/۱۲
 
تشکر مرتضی صحراگرد ۱۳۹۰/۷/۱۲
پاسخ به: تشکر ابوالفضل حسن الدين ۱۳۹۰/۷/۱۲
 
تشکر فراوان سيد امين منعميان ۱۳۹۰/۷/۱۲
پاسخ به: تشکر فراوان ابوالفضل حسن الدين ۱۳۹۰/۷/۱۲
 
با عرض تشكر عليرضا . ۱۳۹۰/۷/۱۲
پاسخ به: با عرض تشكر ابوالفضل حسن الدين ۱۳۹۰/۷/۱۲
پاسخ به: با عرض تشكر مجید شهاب فر ۱۳۹۰/۷/۱۲
 
تشکر حسین منافي ۱۳۹۰/۷/۱۱
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to