webForumDet fria alternativet

Konvertera php-kod för en facebookchat till C#

.NET

0 svar · 2 679 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Jag försöker konvertera denna chatkod i länken nedan som är byggt i php till c#

Får inte riktigt till det eftersom PHP och ASP.NET skiljer sig ganska mycket i hur arrayer fungerar och sessions. Jag har försökt med en arraylist och även hashtable som php-arrayer egentligen är.

Här är länken:
http://anantgarg.com/2009/05/13/gmail-facebook-style-jquery-chat/

Här är min kod

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;

namespace wwwroot.chat
{
    public partial class chathandler : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (Request.QueryString["action"] != null)
            {
                switch (Request.QueryString["action"].ToString())
                {
                    case "chatheartbeat":
                        {
                            chatHeartbeat();
                            break;
                        }
                    case "sendchat":
                        {
                            sendChat();
                            break;
                        }
                    case "closechat":
                        {
                            closeChat();
                            break;
                        }
                    case "startchatsession":
                        {
                            startChatSession();
                            break;
                        }
                }
            }
            if (Session["chatHistory"] == null)
            {
                Session["chatHistory"] = new ArrayList(); ;
            }
            if (Session["openChatBoxes"] == null)
            {
                Session["openChatBoxes"] = new ArrayList();
            }
            if(Session["tsChatBoxes"]==null)
            {
                Session["tsChatBoxes"] = new ArrayList();
            }
            ArrayList s = new ArrayList();
        }
        private void chatHeartbeat()
        {
            /* Add the Code to get the chat from the databse here and assign the result to datatable dtChat */

            GenericCollection<Chat> messages = Chat.GetNotRecieved(User.Identity.Name);
            string items = "";

            foreach (Chat message in messages)
            {
                if (!((ArrayList)(Session["openChatBoxes"])).Contains(message.UsernameFrom) && ((ArrayList)(Session["chatHistory"])).Contains(message.UsernameFrom))
                {
                    items = ((ArrayList)(Session["chatHistory"]))[((ArrayList)(Session["chatHistory"])).IndexOf((object)(message.UsernameFrom))].ToString();
                }
                message.Message = sanitize(message.Message);

                items = items + "\"s\":\"0\",\"f\":\"{" + message.UsernameFrom.ToString() + "}\",\"m\":\"{" + message.Message + "}\"";

                if (!((ArrayList)(Session["chatHistory"])).Contains(message.UsernameFrom))
                {
                    ((ArrayList)(Session["chatHistory"]))[((ArrayList)(Session["chatHistory"])).IndexOf((object)(message.UsernameFrom))] = "";
                }
                ((ArrayList)(Session["chatHistory"]))[getIndexOf(((ArrayList)(Session["chatHistory"])), message.UsernameFrom.ToString())] += "\"s\":\"0\",\"f\":\"{" + message.UsernameFrom.ToString() + "}\",\"m\":\"{" + message.Message + "}\"";
                ((ArrayList)(Session["tsChatBoxes"]))[getIndexOf(((ArrayList)(Session["tsChatBoxes"])), message.UsernameFrom.ToString())] = null;  // Unset means clear the session value
                ((ArrayList)(Session["openChatBoxes"]))[getIndexOf(((ArrayList)(Session["openChatBoxes"])), message.UsernameFrom.ToString())] = message.Sent;
            }
            if (Session["openChatBoxes"] != null)
            {
                ArrayList openChatBoxesArray = (ArrayList)(Session["openChatBoxes"]);
                for (int i = 0; i < openChatBoxesArray.Count; i++)
                {
                    int chatbox = i;
                    if (openChatBoxesArray[i] != null)
                    {
                        DateTime time = (DateTime)(openChatBoxesArray[i]);
                        string timeval = "";
                        TimeSpan Now = (TimeSpan)(DateTime.Now - time);
                        timeval = time.ToString("g:iA M dS");
                        string message = "Sent at " + timeval;

                        if (Now.Minutes > 180)
                        {
                            items += "\"s\":\"2\",\"f\":\"{" + chatbox.ToString() + "}\",\"m\":\"{" + message + "}\"";
                            if (((ArrayList)(Session["chatHistory"]))[chatbox] != null)
                            {
                                ((ArrayList)(Session["chatHistory"]))[chatbox] = "";
                            }
                            ((ArrayList)(Session["chatHistory"]))[chatbox] += "\"s\":\"2\",\"f\":\"{" + chatbox.ToString() + "}\",\"m\":\"{" + message + "}\"";
                            ((ArrayList)(Session["tsChatBoxes"]))[chatbox] = "1";
                        }
                    }
                }
            }
            Chat.UpdateRecieved(User.Identity.Name);
            if (items != string.Empty)
            {
                items = items.Substring(0, items.Length - 1);
            }
            HttpContext.Current.Response.Write("{ ");
            Response.Write("\"items\":[" + items + "]");
            HttpContext.Current.Response.Write(" }");
            Response.End();
        }
        private string sanitize(string text)
        {
            //text = htmlspecialchars(text, ENT_QUOTES);  // Convert the html special characters 
            text = text.Replace("\n\r", "\n");
            text = text.Replace("\r\n", "\n");
            text = text.Replace("\n", "<br>");
            return text;
        }
        private int getIndexOf(ArrayList SessionArray, string Value)
        {
            try
            {
                return SessionArray.IndexOf((object) Value);
            }
            catch
            {
                return 0;
            }
        }

        private string chatBoxSession(int chatbox)
        {

            string items = "";

            if (((ArrayList)(Session["chatHistory"]))[chatbox] != null)
            {  // Check the Session variable 
                items = ((ArrayList)(Session["chatHistory"]))[chatbox].ToString();
            }

            return items;
        }

        private void sendChat()
        {
            string from = User.Identity.Name;  // Assign Seesion user name value to $from value
            string to = Request["to"];				// Assign POST FORM 'To'  value to $to value}
            string message = Request["message"];	// Assign POST FORM 'message' value  to $message value

            ((ArrayList)(Session["openChatBoxes"]))[getIndexOf(((ArrayList)(Session["openChatBoxes"])), Request["to"])] = DateTime.Now.ToString("Y-m-d H:i:s");

            string messagesan = sanitize(message);

            if (((ArrayList)(Session["chatHistory"])).Contains(Request["to"]))
            {
                ((ArrayList)(Session["chatHistory"]))[getIndexOf(((ArrayList)(Session["chatHistory"])), Request["to"])] = "";
            }
            ((ArrayList)(Session["chatHistory"]))[getIndexOf(((ArrayList)(Session["chatHistory"])), Request["to"])] += "\"s\":\"1\",\"f\":\"{" + to + "}\",\"m\":\"{" + messagesan + "}\"";
            ((ArrayList)(Session["tsChatBoxes"]))[getIndexOf(((ArrayList)(Session["tsChatBoxes"])), Request["to"])] = null;

            /* Add Insert Query here*/
            Chat chatObj = new Chat();
            chatObj.UsernameTo = to;
            chatObj.UsernameFrom = from;
            chatObj.Message = message;
            chatObj.Sent = DateTime.Now;
            chatObj.Recieved = false;
            Chat.Insert(chatObj);

            Response.Write("1");
            Response.End();
        }
        private void closeChat()
        {
            int chatbox = 1; //value of chatbox
            ((ArrayList)(Session["openChatBoxes"]))[chatbox] = null;
            Response.Write("1");
        }
        private void startChatSession()
        {
            string items = "";
            if (Session["openChatBoxes"] != null)
            {  // Check the Session variable 
                ArrayList openChatBoxesArray = (ArrayList)(Session["openChatBoxes"]);
                for (int i = 0; i < openChatBoxesArray.Count; i++)
                {  // Loop the session array
                    items += chatBoxSession(i); // Append to Items variable 
                }
            }

            if (items != string.Empty)
            {
                items = items.Substring(0, items.Length - 1);
            }
            HttpContext.Current.Response.Write("{ ");
            HttpContext.Current.Response.Write("\"username\": \"" + HttpContext.Current.User.Identity.Name + "\","); // Display the Username Which is set in the session
            HttpContext.Current.Response.Write("\"items\": [");
            HttpContext.Current.Response.Write(items);
            HttpContext.Current.Response.Write("]");
            HttpContext.Current.Response.Write("}");
            Response.End();
        }
    }
}

Here is the php code I am trying to convert

<? 

define ('DBPATH','localhost');   			// Constant defination , These constants are used to connect the database
define ('DBUSER','root');					// Constant defination
define ('DBPASS','password'); 				// Constant defination
define ('DBNAME','chat'); 					// Constant defination

session_start();  // Start the session , In php for some sever settings You need to start the session through coding

global $dbh;   // global scop 
$dbh = mysql_connect(DBPATH,DBUSER,DBPASS);  // DB connections
mysql_selectdb(DBNAME,$dbh); 				// DB connections

if ($_GET['action'] == "chatheartbeat")   // $_GET is used to read the value from the query string Ex : &action="XXX" 
{ 
	chatHeartbeat();  				// If it is true then call 	chatHeartbeat()  function	
} 
if ($_GET['action'] == "sendchat") {  
	sendChat();						//	call 	sendChat()  function	
	 } 			
if ($_GET['action'] == "closechat") { 
	closeChat(); 					//	call 	closeChat()  function
	} 
if ($_GET['action'] == "startchatsession") { 
	startChatSession(); 				//	call 	startChatSession ()  function
	} 

if (!isset($_SESSION['chatHistory'])) {  // Check the session variable chatHistory has a value OR not
	$_SESSION['chatHistory'] = array();	 // re assign the array 
}

if (!isset($_SESSION['openChatBoxes'])) { // Check the session variable openChatBoxes has a value OR not
	$_SESSION['openChatBoxes'] = array();	
}

function chatHeartbeat() {
	
	$sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC";
	$query = mysql_query($sql); // Excute the query 
	$items = '';

	$chatBoxes = array();  // Init array 

	while ($chat = mysql_fetch_array($query)) {  //  To loop the results 

/* 

Check session array value  $_SESSION['openChatBoxes'][$chat['from'] is empty 
And 
$_SESSION['chatHistory'][$chat['from']]  has a value 

*/

		if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
			$items = $_SESSION['chatHistory'][$chat['from']]; // Assign $item o session value ;
		}

		$chat['message'] = sanitize($chat['message']);  // Call the user defind funtion

// Just fetch the value from the above query and assign to Items ( append the values )
		$items .= <<<EOD
					   {
			"s": "0",
			"f": "{$chat['from']}",
			"m": "{$chat['message']}"
	   },
EOD;

/* 

Check session array value  $_SESSION['chatHistory'][$chat['from'] is empty 

Then  Assign $_SESSION['chatHistory'][$chat['from']]  as EMPTY

*/
	if (!isset($_SESSION['chatHistory'][$chat['from']])) {
		$_SESSION['chatHistory'][$chat['from']] = '';
	}

// Just fetch the value from the above query and Assign ( . Means append )

	$_SESSION['chatHistory'][$chat['from']] .= <<<EOD
						   {
			"s": "0",
			"f": "{$chat['from']}",
			"m": "{$chat['message']}"
	   },
EOD;
		
		
		unset($_SESSION['tsChatBoxes'][$chat['from']]); // Unset means clear the session value
		
		$_SESSION['openChatBoxes'][$chat['from']] = $chat['sent']; // Assign new value to session 
	}

	if (!empty($_SESSION['openChatBoxes'])) {   // Check the session array value $_SESSION['openChatBoxes'] empty OR not
	
	foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) { //  Loop the array
		if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
			$now = time()-strtotime($time);
			$time = date('g:iA M dS', strtotime($time)); // Convert time stamp to date format 

			$message = "Sent at $time";
			if ($now > 180) {
/*
append to Item variable
*/				
				$items .= <<<EOD {
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;

	if (!isset($_SESSION['chatHistory'][$chatbox])) { // Again  Check the session array value $_SESSION['chatHistory'][$chatbox] empty OR not
		$_SESSION['chatHistory'][$chatbox] = ''; // Set  $_SESSION['chatHistory'][$chatbox] array value as Empty
	}
/*
append to $_SESSION['chatHistory'][$chatbox] variable
*/				

	$_SESSION['chatHistory'][$chatbox] .= <<<EOD
		{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
			$_SESSION['tsChatBoxes'][$chatbox] = 1; /// Assign to session varriable 
		}
		}
	}
}

	$sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0";
	$query = mysql_query($sql);
// Run the update Query , Just Db updation , 
	if ($items != '') {
		$items = substr($items, 0, -1);
	}
header('Content-type: application/json'); // Header type assign 
?>
{
		"items": [
			<?php echo $items;?>  // Display the items values
        ]
}

<?php
			exit(0); 
}

function chatBoxSession($chatbox) {
	
	$items = '';
	// This function return Just $_SESSION['chatHistory'][$chatbox] value if it is alredy set
	if (isset($_SESSION['chatHistory'][$chatbox])) {  // Check the Session variable 
		$items = $_SESSION['chatHistory'][$chatbox];
	}

	return $items;
}

function startChatSession() {
	$items = '';
	if (!empty($_SESSION['openChatBoxes'])) {  // Check the Session variable 
		foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {  // Loop the session array
			$items .= chatBoxSession($chatbox); // Append to Items variable 
		}
	}

	if ($items != '') {
		$items = substr($items, 0, -1);
	}

header('Content-type: application/json');
?>
{
		"username": "<?php echo $_SESSION['username'];?>", // Display the Username Which is set in the session
		"items": [
			<?php echo $items;?>  // Display the Items valus
        ]
}

<?php

	exit(0);
}

function sendChat() {
	$from = $_SESSION['username'];  // Assign Seesion user name value to $from value
	$to = $_POST['to'];				// Assign POST FORM 'To'  value to $to value
	$message = $_POST['message'];	// Assign POST FORM 'message' value  to $message value

	$_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
	
	$messagesan = sanitize($message);

	if (!isset($_SESSION['chatHistory'][$_POST['to']])) {
		$_SESSION['chatHistory'][$_POST['to']] = '';
	}
// Assign to session variable 
	$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
					   {
			"s": "1",
			"f": "{$to}",
			"m": "{$messagesan}"
	   },
EOD;

	unset($_SESSION['tsChatBoxes'][$_POST['to']]); // Clear the session value 

// Insert query 

	$sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())";
	$query = mysql_query($sql); // Run the insert query 
	echo "1";
	exit(0);
}

function closeChat() {

	unset($_SESSION['openChatBoxes'][$_POST['chatbox']]); // Clear the session value 
	
	echo "1";
	exit(0);
}

function sanitize($text) {
	$text = htmlspecialchars($text, ENT_QUOTES);  // Convert the html special characters 
	$text = str_replace("\n\r","\n",$text); // String Replace 
	$text = str_replace("\r\n","\n",$text); // String Replace 
	$text = str_replace("\n","<br>",$text); // String Replace 
	return $text;
}

Man kan inte initiera en arraylist som jag gjort. Men min förståelse för php-koden begränsar mig.

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)