you're really kind to do such a favor to me
here's my problem:
I have many rooms (channel) in which each user can log on and chat. when a few users are in the same room they can chat without any problem but when one of them switches to another room, the users in previous room cannot send/receive any text:
Code:
////server.aspx/////////////
protected void processLogin()
{
//Channel Data
string channelname = Request.QueryString["c"].ToString();
foreach (RoomInfo var in Global.RoomMgmt.RoomList)
{
if (!Global.Engine.ChannelExists(var.RoomID))
{
//If channel doesn't exist, add a new one.
if (!Global.Engine.AddChannel(var.RoomID))
{
Response.Write(" ERROR: Maximal Channel Count Reached !");
return;
}
}
}
string user = Request.QueryString["u"].ToString();
string ip = Request.QueryString["i"].ToString();
string role = Request.QueryString["r"].ToString();
Guid g = Guid.NewGuid();
Global.Engine.GetChannel(Global.RoomMgmt.RoomList[0].RoomID).AddUser(g.ToString(), user, ip, role);
//Save Session Data
Session["userid"] = g.ToString();
Session["username"] = user;
Session["channel"] = Global.RoomMgmt.RoomList[0].RoomID;
//Change Login Status
Session["LoggedIn"] = "YES";
Response.Redirect("ChatRoom.aspx?" + g.ToString() + "&u=" + user + "&r=" + role + "&c=" + 0);
}
protected void processPostMsg()
{
string
user = (string)Session["username"];
...
//Check Login Status
if (!checkLoginStatus(user))
{
return;
}
string text = Request.QueryString[ "t" ];
string to_uid = Request.QueryString["s"];
string iswhisper = Request.QueryString [ "w" ];
//Session Data
string channelname = (string)Session["channel"];
Thread.Sleep(Convert.ToInt32(Global.FloodControl));
Global.Engine.GetChannel(channelname).AddText( user, to_uid, text, iswhisper );
}
protected void processGetMsg()
{
lock (syncRoot)
{
string userid = (string)Session["username"];
if (!checkLoginStatus(userid))
{
Response.Redirect("Login.aspx");
return;
}
string channelname = (string)Session["channel"];
Response.Write(Global.Engine.GetChannel(channelname).GetPersonalBufferText(userid));
}
}
protected void processChangeTab()
{//this function is called when user switches to another room
if (Request.QueryString.Count == 0)
return;
//Channel Data
string channelname = Request.QueryString["c"].ToString();
if (!Global.Engine.ChannelExists(channelname))
{
//If channel doesn't exist, add a new one.
if (!Global.Engine.AddChannel(channelname))
{
Response.Write(" ERROR: Maximal Channel Count Reached !");
return;
}
}
string user = Request.QueryString["u"].ToString();
string ip = Request.QueryString["i"].ToString();
string role = Request.QueryString["r"].ToString();
Guid g = Guid.NewGuid();
string prevChannelname = Request.QueryString["n"].ToString();
if (prevChannelname != channelname)
{
Global.Engine.GetChannel(prevChannelname).Remove(user);
Global.Engine.GetChannel(channelname).AddUser(g.ToString(), user, ip, role);
//Save Session Data
Session["userid"] = g.ToString();
Session["username"] = user;
Session["channel"] = channelname;
//Change Login Status
Session["LoggedIn"] = "YES";
//Global.IsTabChanged = true;
}
Response.Redirect("ChatRoom.aspx?" + g.ToString() + "&u=" + user + "&r=" + role + "&c=" + Global.RoomMgmt.GetRoomIndex(channelname));
} protected bool checkLoginStatus(string userid)
{
//string userid = (string)Session["userid"];
string channelname = (string)Session["channel"];
if (channelname != null)
{
if (!Global.Engine.GetChannel(channelname).GuidExists(userid))
{
Session["LoggedIn"] = "NO";
return false;
}
else
{
return true;
}
}
else
return false;
}
///////////////////////////////////
//////////ChatEngine.cs///////////
public void AddText(string guid, string to_uid, string text, string iswhisper)
{
object key = null ;
foreach (DictionaryEntry e in users)
{
if (e.Value.ToString() == guid)
{
key = e.Key;
break;
}
}
if (text.Trim().Length == 0)
return;
if (text.Length > Convert.ToInt32(Global.TextCharLimit))
{
chat.Add(
new ChatMessage(
"UCHAT_SERVER",
"ALL",
this.MakeServerMessage(
string.Format(
textlimitfmt,
guid,//users[guid].ToString(),
text.Length,
Global.TextCharLimit
)
),
"SERVER_MSG"
)
);
return;
}
while (chat.Count > maxbuffer)
{
chat.RemoveAt(0);
}
if (!pings.Contains(key.ToString()))
{
pings.Add(key.ToString());
}
string msgtype = "USER_MSG_NORMAL";
if (iswhisper == "TRUE" )
{
msgtype = "USER_MSG_WHISPER";
}
chat.Add(
new ChatMessage(
key.ToString(),
to_uid,
ParseText(users[key].ToString(), to_uid, text, msgtype),
msgtype
)
);
}
public string GetPersonalBufferText( string guid )
{
StringBuilder sb = new StringBuilder();
lock (syncRoot)
{
object key = null;
foreach (DictionaryEntry e in users)
{
if (e.Value.ToString() == guid)
{
key = e.Key;
break;
}
}
try
{
foreach (ChatMessage line in chat)
{
string msg = string.Empty;
switch (line.MessageType)
{
case "SERVER_MSG":
case "USER_MSG_NORMAL":
msg = line.Message;
break;
case "USER_MSG_WHISPER":
if (key.ToString() == line.ToUserID || key.ToString() == line.FromUserID)
{
msg = line.Message;
}
break;
default:
msg = this.MakeServerMessage("Message Type Error!");
break;
}
sb.Append(msg);
}
}
catch (Exception)
{
}
}
return sb.ToString();
}
Those are a part of my server side code, that are involved with the mentioned problem.
Thank you very much indeed,