بررسی نسخه نرم افزار یکی از الزامات همیشگی برای نرم افزار های عمومی می باشد. در این آموزش نحوه بررسی نسخه کنونی نرم افزار با نسخه آنلاین را فرا خواهید گرفت.


برای دریافت اطلاعات نسخه جدید از دو روش می توانیم استفاده کنیم :


1. آپلود یک فایل متنی در سرور و دانلود اطلاعات آن
مزایا: عدم نیازبه سرور اختصاصی،عدم نیاز به برنامه نویسی PHP و طراحی دیتابیس
معایب: نیاز به آپلود دستی فایل

2. استفاده از یک کد PHP و دریافت اطلاعات از دیتابیس

مزایا: مکانیزه شدن دریافت اطلاعات، امکان کنترل، آمار گیری و حتی بررسی لایسنس! و...
معایب:
نیاز به داشتن سرور اختصاصی، برنامه نویسی PHP، نیاز به ساخت دیتابیس


در صورتی که برای نرم افزار خود پنل کاربری و ... طراحی نکرده اید روش 1 بسیار ساده تر بوده و می توانید فایل را در یکی از سایت های اشتراک گذاری فایل آپلود کنید.

در صورتی که برای نرم افزار خود پنل کاربری دارید می توانید از روش دوم استفاده کنید که بسیار کاربردی تر می باشد. در این آموزش نیز ما از این روش استفاده خواهیم کرد.


قدم اول : برنامه نویسی PHP

ابتدا وارد هاست خود شده و سپس در بخش PHPMyAdmin یک Table با نام دلخواه بسازید. در اینجا من از نام tbl_app استفاده کرده ام.

ساختار جدول پیشنهادی را می توانید در تصویر زیر مشاهده کنید.

در صورت نیاز می توانید به دلخواه فیلد های دیگر را بسته به نیاز خود اضافه کنید.

پس از ایجاد جدول یک رکورد ثبت کنید. توجه داشته باشید با هر بروز رسانی همان سطر را باید UPDATE کنید نباید از INSERT استفاده کنید. مگر اینکه بخواهید با روشی دیگر این بررسی را انجام دهید به عنوان مثال استفاده از MAX و یا روش های دیگر.


[رکورد نمونه]


پس از درج یک رکورد نوبت به کد های PHP می رسد. در این کد ها از قواعد ساده Regular Expresstion استفاده شده است.

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/plain; charset=UTF-8");

include_once("config.php");
$result = $conn->query("SELECT app_appversion, app_appdate FROM tbl_app LIMIT 1");

if ($result->num_rows > 0)
{
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
$outp = "version=" . $rs['app_appversion'] . ";date=" . $rs['app_appdate'] . ";";
}
}
else
{
$outp = "error";
}
$conn->close();

echo($outp);
?>

در دو خط اول تعیین میکنیم که خروجی این صفحه به صورت متن خواهد بود. این کار در ادامه مفید خواهد بود.

سپس یک SELECT انجام می دهیم و نسخه نرم افزار و تاریخ آن را از دیتابیس دریافت می کنیم.

در صورتی که رکوردی یافت نشود عبارت error در متغیر outp$ قرار می گیرد.

و در صورتی که رکورد موجود باشد عبارتی مانند زیر در متغیر outp$ قرار می گیرد.

 version=1.0.0.0;date=1394/06/15;

سپس کانکشن بسته شده و متغیر چاپ می شود.


عبارت خروجی یک Regular Expression یا به اختصار Reg Ex می باشد. در این نوع خاص ما دو مقدار از پیش تعیین شده داریم. یکی version و دیگری date که هرکدام دارای یک مقدار مشخص بوده و در انتهای هر مقدار یک ; قرار دارد.


با استفاده از این عبارت می توانیم به راحتی هر بخش را بدون نیاز به نوشتن دستورات پیچیده سطح پائین کار با رشته ها جدا سازی کنیم که در هنگام کد نویسی سی شارپ بیشتر با آن آشنا می شوید.


همچنین با استفاده از این قاعده کلی می توانید به دلخواه هر تعدادی که بخواهید به آن اضافه کنید مثلاً برای توضیحات می توانید به شکل زیر عمل کنید.

version=1.0.0.0;date=1394/06/15;desc=peyman;

نام های تعیین شده برای هر مقدار دلخواه است ولی باید در بخش دریافت گیرنده (که بخش C# کد ما را شامل می شود) نیز آن را اضافه کنیم.


فایل config.php نیز کد هایش بدین شکل است:

این فایل نحوه اتصال به دیتابیس را در خود دارد که برای جلوگیری از تکرار کد ها استفاده می شود و با include_once("config.php") فراخوانی می شود.


<?php
$servername = "localhost";
$username = "YOUR_HOST_USERNAME";
$password = "YOUR_HOST_PASSWORD";
$dbname = "YOUR_DATABASE";


                        // Create connection
                        $conn = new mysqli($servername, $username, $password, $dbname);
                        // Check connection
                        if ($conn->connect_error) {
                            die("Connection failed: " . $conn->connect_error);
                        }
                       
/* change character set to utf8 */
if (!$conn->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $conn->error);
} else {
    /* printf("Current character set: %s\n", $conn->character_set_name()); */
}

?>
فایل های بالا را در هاست خود آپلود کنید.

قدم دوم: برنامه نویسی سی شارپ

بخش برنامه نویسی آسان ترین بخش است! رفرنس زیر را اضافه کنید.
        using System.Net;
private void getnewversion()
{
WebClient newversionCL = new WebClient();
newversionCL.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
newversionCL.Encoding = System.Text.Encoding.UTF8;
newversionCL.DownloadStringCompleted += NewversionCL_DownloadStringCompleted;
newversionCL.DownloadStringAsync(new Uri("آدرس فایل getversion در هاست شما"));
}

ابتدا رفرنس System.Net را اضافه کنید. سپس تابع رو کپی کنید.

در خط اول یک WebClient تعریف کرده ایم.
با استفاده از CachePolicy اعلام می کنیم که نسخه کش شده از اطلاعات را نمی خواهیم تا اطلاعات دریافتی همیشه بروز باشد. (در صورت تمایل نیازی به استفاده از این گزینه نیست)

Encoding را به UTF8 تغییر داده ایم تا اطلاعات فارسی هم بتوانیم دریافت کنیم.
در خط پائین تر رویداد DownloadStringCompleted را به تابع NewversionCL_DownloadStringCompleted نسبت داده ایم تا زمانی که دانلود تمام شد کد های داخل آن اجرا گردد.
سپس با استفاده از DownloadStringAsync رشته مورد نظر را از آدرس تعیین شده در حالت Async دانلود می کنیم.


در ادامه تابع زیر را کپی کنید.

private void NewversionCL_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
string Pattern = "version=(.+?);date=(.+?);";
string Expression = e.Result;

Match SearchMatch = Regex.Match(Expression, Pattern, RegexOptions.IgnoreCase);
if (SearchMatch.Success == true)
{
Version onlineVer = new Version(SearchMatch.Groups[1].Value);
Version currentVer = new Version(Application.ProductVersion);
string onlineDate = SearchMatch.Groups[2].Value;

if (onlineVer > currentVer)
{
lbl_app_comment.Visible = true;
lbl_app_comment.Text = "نسخه جدید موجود است !" + "\n" + "لطفاً جهت بروزرسانی به پنل کاربری مراجعه فرمائید.";
}
else if(onlineVer < currentVer)
{
lbl_app_comment.Visible = true;
lbl_app_comment.Text = "هورا !" + "\n" + "نسخه شما از نسخه سایت جدیدتر است.";
}


}
}
catch (Exception)
{

}
}