الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية عمل شات بسيط في الموقع ((على عدة مراحل ))

بدأه باسل بوشناق في 24 أكتوبر 2012 · 4 رد · 4,195 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قبل البدء في بناء المشروع ، يجب علينا فهم آلية العمل المتبعة هنا، فعند فتح المستخدم لموقع ما يتم عمل نسخة من الصفحة المطلوبة وتشغليها على جهاز المستخدم ، ولذلك فإن كل مستخدم يكون لديه نسخة من الصفحة نفسها في الموقع ، ولذلك فالفكرة هي مشاركة المعلومات بين المستخدمين حيث أن المعلومات المرسلة أو المستقبلة لا تصل إلى المستخدمين الآخرين لذلك سنقوم بإنشاء صفحة CLASS وسيطة يتم فيها تخزين المعلومات و مشاركتها بين صفحات المستخدمين حيث يتم في هذه العملية إرسال نص الرسالة من صفحة المستخدم الأول و تخزينها في صفحة CLASS ثم نقل المعلومات إلى صفحة المستخدم الأول والثاني.

المرحلة الأولى :

ستكون بإنشاء بسيط جداً لهذه الفكرة واختبارها وتطويرها في مراحل أخرى :

- إنشاء الصفحة التالية ونضع فيها المتحكمات التالية:

- TextBox1 : لإظهار نصوص الدردشة

- TextBox2 : اسم المستخدم

- TextBox3 : النص المراد إرساله

وكود الصفحة Default.aspx :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
1-        Response.Write("<meta http-equiv=\"Refresh\"content=\"5\">");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
  2-    string sUser = "MYNAME"; 
  3-    string MyMassege = TextBox2.Text;
  4-    TextBox1.Text += Class1.AddMessage(sUser, MyMassege);
  5-    TextBox2.Text = "";
    }
}

في السطر 1 : تحديث الصفحة كل خمس ثواني

في السطر 2 : اسناد اسم المستخدم إلى TextBox2

في السطر 3 : اسناد نص الرسالة إلى TextBox3

في السطر 4 : تنفيذ الإجراء الموجود في صفحة Class1 حيث يتم إرسال اسم المستخدم و النص ليقوم الإجراء بدوره بإعادة الإرسال وإظهار النص على "كافة صفحات المستخدمين" كما سنرى لاحقاً.

في السطر 5 : حذف نص الرسالة بعد الإرسال

وسيكون SOURCE الصفحة كالتالي:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server" Height="305px" TextMode="MultiLine" 
        Width="300px"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    <asp:TextBox ID="TextBox2" runat="server" Width="358px"></asp:TextBox>
    </form>
</body>
</html>

إنشاء صفحة CLASS

والكود :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;

public class Class1
{

 static public string  AddMessage( string sUser, string sMsg)
    {
     string sResponse = sUser  + sMsg;
     return (sResponse);
}
    }

الإجراء المستخدم في استقبال اسم المستخدم و النص و إعادة القيمة في المتغير sResponse

نستنتج أن عيوب المرحلة :

- عدم الترتيب في النص

- تأثير عملية تحديث الصفحة على الكتابة حيث يحتاج إلى إعادة تعيين المؤشر بعد اختفاءه

- لا يوجد قنوات خاصة بين مستخدمين محددين إنما هي غرفة عامة على أي مستخدم

- عدم تخزين نصوص الرسائل حيث أن عملية الخروج من الصفحة والعودة تحذف جميع الرسائل السابقة

إن شاء الله سأقوم بحل هذه المشاكل في المرحلة الثانية.

simple chat.rar

1
#2

السلام عليكم

بارك الله بك اخي وننتظر المرحلة الثانية :)

#3

وعليكم السلام .

تسلم أخي، إن شاء الله قريباً.

#4

جزاك الله خيرا .. جارى متابعتك باذن الله .

تم تعديل هذه المشاركة بواسطة The expendable في 28 أكتوبر 2012 في 13:53

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#5

المرحلة الثانية:

أولاً: يجب إضافة صفحة أخرى ولتكن Default2.aspx والتي سنقوم بإرسال نص الرسالة إليها بدلاً من Default.aspx، وأيضاً إضافة Iframe في Default.aspx تكون مهمته تضمين Default2.aspx في Default.aspx حيث ستكون لدينا صفحتان مدمجتان سوياً بينما سيكون التحديث على صفحة واحدة فقط هي Default2.aspx من خلال Iframe .

ثانياً: استخدام ArryList لسببين:

1- سهولة التعامل معها ضمن الإجراءات

2- تخزين النص المرسل كاملاً حتى إذا تم إغلاق الصفحة والعودة إليها من جديد سيكون النص محفوظ بشكل كامل.

بداية التعديل ستكون في Default.aspx وإضافة Iframe فيها على الشكل التالي:

<iframe style="BORDER-RIGHT: orange 2px solid; BORDER-TOP: orange 2px solid; BORDER-LEFT: orange 2px solid; WIDTH: 350px; BORDER-BOTTOM: orange 2px solid; HEIGHT: 250px; BACKGROUND-COLOR: #ffffcc"

src="Default2.aspx">Chat</iframe>

ونلاحظ التضمين هنا

src="Default2.aspx "

ثم إضافة TextBox1.text لاسم المستخدم و TextBox2.text لقناة الاتصال.

وأخيراً في حدث Button1_Click نضيف قناة الاتصال وسيتم نقل قيمتها عبر الصفحات باستخدام Session["Channel"

Session["Channel"] = sDealer;

Class1.AddMessage(sDealer, sUser, MyMassege);

والتعديل في Default2.aspx.cs سيكون باستقبال قناة الاتصال و نص الرسالة الكلي:

if (Session["Channel"] != null)

{

Response.Write(Class1.GetAllMessages(Session["Channel"].ToString()));

}

والتعديل في Class1 سيكون جذرياً باستعمال Arraylist

والإجراء AddMessage لإضافة نص الرسالة إلى Arraylist

والإجراء FormatChat ستكون مهمته في ترتيب شكل نص الرسالة

والإجراء GetAllMessages يقوم بجلب كافة النصوص المخزنة لعرضها في قناة الاتصال المطلوبة

الإجراء AddMessage :

static public void AddMessage(string sDealer, string sUser, string sMsg)
    {
        string sAddText = sDealer + "~" + sUser + "~" + sMsg;
        pArray.Add(sAddText);
    }

من خلال تعريف المتغير sAddtext فإنه سيحتوي على قناة الاتصال sDealer واسم المستخدم sUser ونص الرسالة sMsg

واستخدام المحرف "~" من أجل الوصول إليه في الإجراء FormatChat من أجل التعامل مع المعلومات بشكل منفصل.

الإجراء FormatChat :

 static public string FormatChat(string sLine, string sDealer)
    {
        int iFirst = sLine.IndexOf("~");
        int iLast = sLine.LastIndexOf("~");

        string sDeal = sLine.Substring(0, iFirst);
        if (sDeal != sDealer)
            return ("");

        string sUser = sLine.Substring(iFirst + 1, iLast - (iFirst + 1));

        string sMsg = sLine.Substring(iLast + 1);

        string sRet = "<STRONG>" + sUser + ": </STRONG>" + sMsg + "<BR>";

        return (sRet);
    }

في البداية الحصول على Index لكل من المحرف الأول والثاني، ثم الحصول على كل متغير على حدى sDeal و sUser و sMsg ثم ترتيبها بالشكل المطلوب في المتغير sRet

الإجراء GetAllMessages :

static public string GetAllMessages(string sDealer)
    {
        string sResponse = "";

        for (int i = 0; i < pArray.Count; i++)
        {
            sResponse = sResponse + FormatChat(pArray.ToString(), sDealer);
        }

        return (sResponse);
    }

وهو الإجراء النهائي الذي سنحصل منه على معلومات الرسالة الحالية و كافة الرسائل المخزنة من أجل إظهارها في قناة الاتصال المطلوبة.

simple chat2.rar

مواضيع مشابهة