Exemple #1
0
        public void ProcessRequest(HttpContext context)
        {
            if (context.Session[CommonConst.S_User] == null)
            {
                context.Session[CommonConst.S_User] = CommonConst.GetUserByIP(context.Request.UserHostAddress, context.Application[CommonConst.A_PredefinedUsers]);
            }

            User user = (User)context.Session[CommonConst.S_User];

            //save new message
            if (context.Request.Form.Count > 0)
            {
                var imgData = context.Request.Form[0];

                context.Application[CommonConst.A_Drawing] = imgData;
            }
            else
            {
                var data = context.Application[CommonConst.A_Drawing];

                //var obj = new { Content = data };
                //var serial = JsonConvert.SerializeObject(obj);

                ////context.Response.ContentType = "text/plain";
                //context.Response.Write(serial);

                //context.Response.ContentType = "image/octet-stream";
                context.Response.Write(data);
            }
        }
Exemple #2
0
        protected override void OnPreInit(EventArgs e)
        {
            base.OnPreInit(e);

            if (Session[CommonConst.S_User] == null)
            {
                Session[CommonConst.S_User] = CommonConst.GetUserByIP(Request.UserHostAddress, HttpContext.Current.Application[CommonConst.A_PredefinedUsers]);
            }

            User = (User)Session[CommonConst.S_User];
        }
        public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");

            if (context.Session[CommonConst.S_User] == null)
            {
                context.Session[CommonConst.S_User] = CommonConst.GetUserByIP(context.Request.UserHostAddress, context.Application[CommonConst.A_PredefinedUsers]);
            }

            User user = (User)context.Session[CommonConst.S_User];

            var users = context.Application[CommonConst.A_Users] as IList <User>;

            ////update user online status
            //if (users.Count(o => o.Username == user.Username) == 0)
            //{
            //    users.Add(user);
            //    context.Application[CommonConst.A_Users] = users;
            //}

            //var @where = users.Where(o => o.Username != user.Username);
            var online = users.Where(o => (DateTime.Now - o.LastOnlineTime).TotalSeconds < 5);

            ////set offline time
            //var offline = users.Where(o => online.Count(p => p.IPAddress == o.IPAddress) == 0);
            //foreach (var u in offline)
            //{
            //    u.LastOfflineTime = DateTime.Now;
            //}

            //response
            var arr = from m in online //users//online//@where
                      orderby m.IPAddress ascending
                                       //select new { User = m.FullName //+ " " + m.IPAddress
                                       //    +" "//+ " lastOnline:"
                                       //    + m.LastOnlineTime.ToLongTimeString()
                                       //+ " " + DateTime.Now.ToLongTimeString()
                                       //};
                      select new { User = m.FullName };

            var serial = JsonConvert.SerializeObject(arr);

            //context.Response.ContentType = "text/plain";
            context.Response.Write(serial);
        }
        public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");

            if (context.Session[CommonConst.S_User] == null)
            {
                context.Session[CommonConst.S_User] = CommonConst.GetUserByIP(context.Request.UserHostAddress, context.Application[CommonConst.A_PredefinedUsers]);
            }

            User user = (User)context.Session[CommonConst.S_User];

            //Online Users
            var users = context.Application[CommonConst.A_DrawingUsers] as IList <User>;

            if (users.Count(o => o.IPAddress == user.IPAddress) == 0)
            {
                user.LastOnlineTimeDrawing = DateTime.Now;
                users.Add(user);
            }
            else
            {
                var appUser = users.Single(o => o.IPAddress == user.IPAddress);
                appUser.LastOnlineTimeDrawing = DateTime.Now;
            }
            context.Application[CommonConst.A_DrawingUsers] = users;

            var online = users.Where(o => (DateTime.Now - o.LastOnlineTimeDrawing).TotalSeconds < 5);


            //chat
            var messages = context.Application[CommonConst.A_DrawingChat] as IList <Message>;
            var lastID   = Convert.ToInt32(context.Request.QueryString["LastID"]);
            //save new message
            String strChat = null;
            var    msgID   = 0;

            if (context.Request.QueryString["Content"] != null)
            {
                strChat = context.Request.QueryString["Content"];
                msgID   = messages.Count + 1;
                messages.Add(new Message {
                    Content = strChat, Sender = user, Time = DateTime.Now, ID = msgID
                });
            }
            var    @where   = lastID > messages.Count ? messages : messages.Where(o => o.ID > lastID);
            string timeMask = "HH:mm:ss";
            var    arrChat  = from m in @where
                              select new { Content = m.Content, ID = m.ID, User = m.Sender.FullName, Time = m.Time.ToString(timeMask) };


            //Drawing Controlling
            var draw = context.Application[CommonConst.A_DrawingControl] == null
                ? new Class.Drawing
            {
                Keyword           = "",
                HostUserIPAddress = "",
                Step = 0
            }
                : (Class.Drawing)context.Application[CommonConst.A_DrawingControl];


            switch (draw.Step)
            {
            case 0:
                if (online.Count() > 1)
                {
                    NewGame(online, draw);
                }
                else if (String.IsNullOrEmpty(draw.TipStep))
                {
                    draw.TipStep = "等待其他玩家进入。。。";
                    //draw.TipStep += "<br/>暫くお待ちください。。。";
                }
                break;

            case 1:
                if (online.Count() <= 1)
                {
                    draw.Step    = 0;
                    draw.EndTime = DateTime.Now;
                    //draw.TipEndReason = "人数不足,游戏中断。";
                    draw.TipStep = "人数不足,游戏中断。等待其他玩家进入。。。";
                    //draw.TipStep += "<br/>ゲームが中断しました。暫くお待ちください。。。";
                }
                else if (online.Count(o => o.IPAddress == draw.HostUserIPAddress) == 0 && online.Count() > 1)
                {
                    draw.Step    = 2;
                    draw.EndTime = DateTime.Now;
                    //draw.TipEndReason = "作画者离开了游戏。";
                    draw.TipStep = "作画者离开了游戏。10秒后开始新游戏。。。";
                    //draw.TipStep += "<br/>作画者が離れました。10秒後新しいゲームを開始。。。";
                }
                else if ((DateTime.Now - draw.BeginTime).TotalSeconds <= 60)
                {
                    draw.TipStep = "游戏进行中。。。剩余时间 " + (60 - Math.Round((DateTime.Now - draw.BeginTime).TotalSeconds)) + " 秒{0}";
                    //draw.TipStep += "<br/>ゲーム進行中。。。残り時間 " + (60 - Math.Round((DateTime.Now - draw.BeginTime).TotalSeconds)) + " 秒{1}";

                    //是否回答正确
                    if (user.IPAddress != draw.HostUserIPAddress && draw.CorrectUsers.Count(o => o == user.IPAddress) == 0)
                    {
                        if (strChat == draw.Keyword)
                        {
                            draw.CorrectUsers.Add(user.IPAddress);

                            //如果超过两个人 答对问题不要显示答案
                            if (online.Count() > 2)
                            {
                                messages.Last().Content = "**** (正解!)";
                            }
                            else
                            {
                                messages.Last().Content = messages.Last().Content + " (正解!)";
                            }
                        }
                    }

                    //除了作画者以外的人 全部答对就结束游戏
                    if (online.Count(o => o.IPAddress != draw.HostUserIPAddress && draw.CorrectUsers.Count(p => p == o.IPAddress) == 0) == 0)
                    {
                        draw.Step    = 2;
                        draw.EndTime = DateTime.Now;
                        //draw.TipEndReason = "时间到。";
                        draw.TipStep = "游戏结束。答案是 " + draw.Keyword + " 。10秒后开始新游戏。。。";
                        //draw.TipStep += "ゲーム終了。回答は " + draw.Keyword + " です。10秒後新しいゲームを開始。。。";
                    }

                    if (user.IPAddress == draw.HostUserIPAddress)
                    {
                        draw.TipStep = draw.TipStep.Replace("{0}", "   你要画的是:" + draw.Keyword);
                        //draw.TipStep = draw.TipStep.Replace("{1}", "   これを描いてください:" + draw.Keyword);
                    }
                    else
                    {
                        //二级提示
                        if ((DateTime.Now - draw.BeginTime).TotalSeconds > 45)
                        {
                            if (draw.idx == -1)
                            {
                                var random = new Random();
                                draw.idx = random.Next(0, draw.Keyword.Length);
                            }
                            string result = "";
                            for (var i = 0; i < draw.Keyword.Length; i++)
                            {
                                result += "※";
                            }
                            result = result.Substring(0, draw.idx) + draw.Keyword[draw.idx] + result.Substring(draw.idx + 1);

                            draw.TipStep = draw.TipStep.Replace("{0}", "   提示:" + result);
                            //draw.TipStep = draw.TipStep.Replace("{1}", "   ヒント:" + result);
                        }
                        //一级提示
                        else if ((DateTime.Now - draw.BeginTime).TotalSeconds > 10)
                        {
                            draw.TipStep = draw.TipStep.Replace("{0}", "   提示:" + draw.Keyword.Length + "个字");
                            //draw.TipStep = draw.TipStep.Replace("{1}", "   ヒント:" + draw.Keyword.Length + "個文字");
                        }
                        else
                        {
                            draw.TipStep = draw.TipStep.Replace("{0}", "");
                            //draw.TipStep = draw.TipStep.Replace("{1}", "");
                        }
                    }
                }
                else
                {
                    draw.Step    = 2;
                    draw.EndTime = DateTime.Now;
                    //draw.TipEndReason = "时间到。";
                    draw.TipStep = "游戏结束。答案是 " + draw.Keyword + " 。10秒后开始新游戏。。。";
                    //draw.TipStep += "<br/>ゲーム終了。回答は " + draw.Keyword + " です。10秒後新しいゲームを開始。。。";

                    //id = messages.Count + 1;
                    //messages.Add(new Message { Content = "", Sender = new User { FullName="系统"}, Time = DateTime.Now, ID = id });
                }
                break;

            case 2:
                if ((DateTime.Now - draw.EndTime).TotalSeconds < 10)
                {
                    draw.TipStep = "游戏结束。答案是 " + draw.Keyword + " 。" + (10 - Math.Round((DateTime.Now - draw.EndTime).TotalSeconds)) + "秒后开始新游戏。。。";
                    //draw.TipStep += "<br/>ゲーム終了。回答は " + draw.Keyword + " です。" + (10 - Math.Round((DateTime.Now - draw.EndTime).TotalSeconds)) + "秒後新しいゲームを開始。。。";
                }
                else if (online.Count() <= 1)
                {
                    draw.Step    = 0;
                    draw.EndTime = DateTime.Now;
                    //draw.TipEndReason = "人数不足。";
                    draw.TipStep = "人数不足。等待其他玩家进入。。。";
                    //draw.TipStep += "<br/>人数不足。暫くお待ちください。。。";
                }
                else
                {
                    NewGame(online, draw);
                }
                break;

            default:
                break;
            }

            if (draw.HostUserIPAddress == "" || online.Count(o => o.IPAddress == draw.HostUserIPAddress) == 0)
            {
            }

            context.Application[CommonConst.A_DrawingControl] = draw;

            //output
            var arr = from m in online
                      orderby m.IPAddress ascending
                      select new
            {
                User = m.FullName,
                Tip  = draw.Step == 1         //游戏中
                                    ? (m.IPAddress == draw.HostUserIPAddress
                                        ? "(作画中。。。)"
                                        : (draw.CorrectUsers.Count(o => o == m.IPAddress) > 0
                                            ? "(正解!)"
                                            : "(回答中。。。)"))
                                    : (draw.Step == 2//游戏结束后
                                        ? (m.IPAddress == draw.HostUserIPAddress
                                            ? "(作画者)"
                                            : (draw.CorrectUsers.Count(o => o == m.IPAddress) > 0
                                            ? "(正解!)"
                                            : "(残念。。。)"))
                                        : ""),
                IP = m.IPAddress          //+m.LastOnlineTime+m.LastOnlineTimeDrawing
            };

            var serial = JsonConvert.SerializeObject(new
            {
                Users   = arr,
                Chat    = arrChat,
                isDraw  = draw.HostUserIPAddress == user.IPAddress,
                isGuess = draw.HostUserIPAddress != user.IPAddress,
                Step    = draw.Step,
                Tip     = //draw.TipEndReason +
                          draw.TipStep,
                Keyword = draw.Keyword
            });

            //context.Response.ContentType = "text/plain";
            context.Response.Write(serial);
        }
Exemple #5
0
        public void ProcessRequest(HttpContext context)
        {
            if (context.Session[CommonConst.S_User] == null)
            {
                context.Session[CommonConst.S_User] = CommonConst.GetUserByIP(context.Request.UserHostAddress, context.Application[CommonConst.A_PredefinedUsers]);
            }

            User user = (User)context.Session[CommonConst.S_User];

            //update user online status
            var users = context.Application[CommonConst.A_Users] as IList <User>;

            if (users.Count(o => o.IPAddress == user.IPAddress) == 0)
            {
                user.LastOnlineTime = DateTime.Now;
                users.Add(user);
            }
            else
            {
                var appUser = users.Single(o => o.IPAddress == user.IPAddress);
                appUser.LastOnlineTime = DateTime.Now;
            }
            context.Application[CommonConst.A_Users] = users;


            var messages = context.Application[CommonConst.A_Chat] as IList <Message>;

            var lastID = Convert.ToInt32(context.Request.QueryString["LastID"]);

            //Debug.WriteLine("QueryString:"+context.Request.QueryString["LastID"].ToString()+" "+ user.FullName);

            //save new message
            //if (context.Request.QueryString["Content"] != null)
            bool isPostingForm = false;

            try
            {
                if (context.Request.Form.Count > 0)
                {
                    isPostingForm = true;
                }
            }
            catch (HttpRequestValidationException e)
            {
                isPostingForm = true;
            }

            if (isPostingForm)
            {
                //var str = context.Request.QueryString["Content"];
                var str = context.Request.Form[0];

                var id = messages.Count + 1;
                //var id = (messages.Count == 0 ? 0 : messages.Max(o => o.ID)) + 1;
                //var id = DateTime.Now.Ticks;

                messages.Add(new Message
                {
                    Content = str,
                    Sender  = user,
                    Time    = DateTime.Now,
                    ID      = id,
                    IsPic   = context.Request.QueryString["isPic"] != null,
                    From    = user.FullName,
                    To      = context.Request.QueryString["to"]
                });
            }

            //Debug.WriteLine("save new :" + id);

            //if (lastID > messages.Count()) //服务器重启
            //{
            //}

            //if(messages.Count()>0)
            //    Debug.WriteLine(lastID + " " + messages.Last().ID );


            //response
            //var @where = messages.Where(o => o.ID > lastID);
            var @where = messages.Where(o => o.To == "" || o.From == user.FullName || o.To == user.FullName); //过滤不是自己消息

            @where = lastID > messages.Count ? @where : @where.Where(o => o.ID > lastID);                     //过滤已经收到过的消息

            //string timeMask = "MM/dd HH:mm:ss";
            string timeMask = "HH:mm:ss";

            var arr = from m in @where
                      select new { Content = m.Content, ID = m.ID, User = m.Sender.FullName, Time = m.Time.ToString(timeMask), IsPic = m.IsPic, To = m.To, From = m.From };
            var serial = JsonConvert.SerializeObject(arr);

            //context.Response.ContentType = "text/plain";
            context.Response.Write(serial);
        }