Beispiel #1
0
        private async Task dealWithFindTeam(WebSocket webSocketFromGameHandler)
        {
            WebSocketReceiveResult Wrr;

            do
            {
                var returnResult = await ReceiveStringAsync(webSocketFromGameHandler, 1024 * 1024 * 10);

                Wrr = returnResult.wr;
                //returnResult.wr;
                string outPut = "haveNothingToReturn";
                {
                    var notifyJson = returnResult.result;

                    // var notifyJson = getBodyStr(context);

                    Console.WriteLine($"createTeam receive:{notifyJson}");
                    CommonClass.Command c = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.Command>(notifyJson);

                    switch (c.c)
                    {
                    case "TeamJoin":
                    {
                        /*
                         * TeamJoin,如果传入的字段不是数字,返回 is not number
                         * TeamJoin,如果传入的字段如果是数字,不存在这个队伍 返回not has the team
                         * TeamJoin,如果队伍中人数已满,不存在这个队伍 返回team is full
                         *
                         */
                        CommonClass.TeamJoin teamJoin = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.TeamJoin>(notifyJson);
                        int teamIndex;
                        if (int.TryParse(teamJoin.TeamIndex, out teamIndex))
                        {
                            bool memberIsFull  = false;
                            bool notHasTheTeam = false;
                            Team t             = null;
                            lock (Program.teamLock)
                            {
                                if (Program.allTeams.ContainsKey(teamIndex))
                                {
                                    if (Program.allTeams[teamIndex].member.Count >= 4)
                                    {
                                        memberIsFull = true;
                                    }
                                    else
                                    {
                                        Program.allTeams[teamIndex].member.Add(teamJoin);
                                        t = Program.allTeams[teamIndex];
                                    }
                                }
                                else
                                {
                                    notHasTheTeam = true;
                                }
                            }
                            if (memberIsFull)
                            {
                                outPut = "team is full";
                                // await context.Response.WriteAsync("");
                            }
                            else if (notHasTheTeam)
                            {
                                outPut = "not has the team";
                                //await context.Response.WriteAsync("");
                            }
                            else if (t.IsBegun)
                            {
                                outPut = "game has begun";
                                //t.IsBegun 必须在判断 notHasTheTeam 之后。否则t可能为null
                                //  await context.Response.WriteAsync("");
                            }
                            else
                            {
                                var PlayerNames = new List <string>();
                                CommonClass.TeamJoinFinish teamJoinFinish = new CommonClass.TeamJoinFinish()
                                {
                                    c           = "TeamJoinFinish",
                                    PlayerNames = new List <string>(),
                                    TeamNum     = t.TeamID,
                                    WebSocketID = teamJoin.WebSocketID
                                                  //  PlayerNames =
                                };
                                {
                                    CommonClass.TeamJoinBroadInfo addInfomation = new CommonClass.TeamJoinBroadInfo()
                                    {
                                        c           = "TeamJoinBroadInfo",
                                        PlayerName  = teamJoin.PlayerName,
                                        WebSocketID = t.captain.WebSocketID
                                    };
                                    await sendMsg(t.captain.FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(addInfomation));
                                }
                                teamJoinFinish.PlayerNames.Add(t.captain.PlayerName);
                                for (var i = 0; i < t.member.Count; i++)
                                {
                                    teamJoinFinish.PlayerNames.Add(t.member[i].PlayerName);
                                    if (t.member[i].FromUrl == teamJoin.FromUrl && t.member[i].WebSocketID == teamJoin.WebSocketID)
                                    {
                                    }
                                    else
                                    {
                                        CommonClass.TeamJoinBroadInfo addInfomation = new CommonClass.TeamJoinBroadInfo()
                                        {
                                            c           = "TeamJoinBroadInfo",
                                            PlayerName  = teamJoin.PlayerName,
                                            WebSocketID = t.member[i].WebSocketID
                                        };
                                        await sendMsg(t.member[i].FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(addInfomation));
                                    }
                                }

                                await sendMsg(teamJoin.FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(teamJoinFinish));

                                outPut = "ok";
                                //  await context.Response.WriteAsync("ok");
                                // t.captain.
                                //await context.Response.WriteAsync("not has the team");
                            }
                        }
                        else
                        {
                            outPut = "is not number";
                            // await context.Response.WriteAsync("");
                        }
                    }; break;
                    }
                }
                {
                    var sendData = Encoding.UTF8.GetBytes(outPut);
                    await webSocketFromGameHandler.SendAsync(new ArraySegment <byte>(sendData, 0, sendData.Length), WebSocketMessageType.Text, true, CancellationToken.None);
                }
            } while (!Wrr.CloseStatus.HasValue);
        }
Beispiel #2
0
        private async Task dealWithTeamBegain(WebSocket webSocketFromGameHandler)
        {
            WebSocketReceiveResult Wrr;

            do
            {
                var returnResult = await ReceiveStringAsync(webSocketFromGameHandler, 1024 * 1024 * 10);

                Wrr = returnResult.wr;
                //returnResult.wr;
                string outPut = "haveNothingToReturn";
                {
                    var notifyJson = returnResult.result;

                    // var notifyJson = getBodyStr(context);

                    Console.WriteLine($"createTeam receive:{notifyJson}");
                    CommonClass.Command c = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.Command>(notifyJson);

                    switch (c.c)
                    {
                    case "TeamBegain":
                    {
                        CommonClass.TeamBegain teamBegain = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.TeamBegain>(notifyJson);

                        Team t = null;
                        lock (Program.teamLock)
                        {
                            if (Program.allTeams.ContainsKey(teamBegain.TeamNum))
                            {
                                t = Program.allTeams[teamBegain.TeamNum];
                            }
                            //Program.allTeams.Add()
                        }
                        if (t == null)
                        {
                            outPut = "ng";
                        }
                        else
                        {
                            for (var i = 0; i < t.member.Count; i++)
                            {
                                var secret = CommonClass.AES.AesEncrypt("team:" + teamBegain.RoomIndex.ToString(), t.member[i].CommandStart);
                                CommonClass.TeamNumWithSecret teamNumWithSecret = new CommonClass.TeamNumWithSecret()
                                {
                                    c           = "TeamNumWithSecret",
                                    WebSocketID = t.member[i].WebSocketID,
                                    Secret      = secret
                                };
                                var json = Newtonsoft.Json.JsonConvert.SerializeObject(teamNumWithSecret);
                                await sendMsg(t.captain.FromUrl, json);
                            }
                            t.IsBegun = true;
                            outPut    = "ok";
                        }
                    }; break;
                    }
                }
                {
                    var sendData = Encoding.UTF8.GetBytes(outPut);
                    await webSocketFromGameHandler.SendAsync(new ArraySegment <byte>(sendData, 0, sendData.Length), WebSocketMessageType.Text, true, CancellationToken.None);
                }
            } while (!Wrr.CloseStatus.HasValue);
        }
Beispiel #3
0
        private void findTeam(IApplicationBuilder app)
        {
            //app.Run(async context =>
            //{

            //});
            app.Run(async context =>
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    await dealWithFindTeam(webSocket);
                }
            });
            return;

            app.Run(async context =>
            {
                if (context.Request.Method.ToLower() == "post")
                {
                    //  await context.Response.WriteAsync("ok");
                    var notifyJson = getBodyStr(context);

                    Console.WriteLine($"findTeam receive:{notifyJson}");
                    CommonClass.Command c = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.Command>(notifyJson);

                    switch (c.c)
                    {
                    case "TeamJoin":
                        {
                            /*
                             * TeamJoin,如果传入的字段不是数字,返回 is not number
                             * TeamJoin,如果传入的字段如果是数字,不存在这个队伍 返回not has the team
                             * TeamJoin,如果队伍中人数已满,不存在这个队伍 返回team is full
                             *
                             */
                            CommonClass.TeamJoin teamJoin = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.TeamJoin>(notifyJson);
                            int teamIndex;
                            if (int.TryParse(teamJoin.TeamIndex, out teamIndex))
                            {
                                bool memberIsFull  = false;
                                bool notHasTheTeam = false;
                                Team t             = null;
                                lock (Program.teamLock)
                                {
                                    if (Program.allTeams.ContainsKey(teamIndex))
                                    {
                                        if (Program.allTeams[teamIndex].member.Count >= 4)
                                        {
                                            memberIsFull = true;
                                        }
                                        else
                                        {
                                            Program.allTeams[teamIndex].member.Add(teamJoin);
                                            t = Program.allTeams[teamIndex];
                                        }
                                    }
                                    else
                                    {
                                        notHasTheTeam = true;
                                    }
                                }
                                if (memberIsFull)
                                {
                                    await context.Response.WriteAsync("team is full");
                                }
                                else if (notHasTheTeam)
                                {
                                    await context.Response.WriteAsync("not has the team");
                                }
                                else if (t.IsBegun)
                                {
                                    //t.IsBegun 必须在判断 notHasTheTeam 之后。否则t可能为null
                                    await context.Response.WriteAsync("game has begun");
                                }
                                else
                                {
                                    var PlayerNames = new List <string>();
                                    CommonClass.TeamJoinFinish teamJoinFinish = new CommonClass.TeamJoinFinish()
                                    {
                                        c           = "TeamJoinFinish",
                                        PlayerNames = new List <string>(),
                                        TeamNum     = t.TeamID,
                                        WebSocketID = teamJoin.WebSocketID
                                                      //  PlayerNames =
                                    };
                                    {
                                        CommonClass.TeamJoinBroadInfo addInfomation = new CommonClass.TeamJoinBroadInfo()
                                        {
                                            c           = "TeamJoinBroadInfo",
                                            PlayerName  = teamJoin.PlayerName,
                                            WebSocketID = t.captain.WebSocketID
                                        };
                                        await sendMsg(t.captain.FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(addInfomation));
                                    }
                                    teamJoinFinish.PlayerNames.Add(t.captain.PlayerName);
                                    for (var i = 0; i < t.member.Count; i++)
                                    {
                                        teamJoinFinish.PlayerNames.Add(t.member[i].PlayerName);
                                        if (t.member[i].FromUrl == teamJoin.FromUrl && t.member[i].WebSocketID == teamJoin.WebSocketID)
                                        {
                                        }
                                        else
                                        {
                                            CommonClass.TeamJoinBroadInfo addInfomation = new CommonClass.TeamJoinBroadInfo()
                                            {
                                                c           = "TeamJoinBroadInfo",
                                                PlayerName  = teamJoin.PlayerName,
                                                WebSocketID = t.member[i].WebSocketID
                                            };
                                            await sendMsg(t.member[i].FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(addInfomation));
                                        }
                                    }

                                    await sendMsg(teamJoin.FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(teamJoinFinish));

                                    await context.Response.WriteAsync("ok");
                                    // t.captain.
                                    //await context.Response.WriteAsync("not has the team");
                                }
                            }
                            else
                            {
                                await context.Response.WriteAsync("is not number");
                            }
                        }; break;
                    }
                    //switch (c.c)
                    //{
                    //    case "TeamCreate":
                    //        {
                    //            CommonClass.TeamCreate teamCreate = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonClass.TeamCreate>(notifyJson);
                    //            int indexV;
                    //            lock (Program.teamLock)
                    //            {
                    //                int maxValue = 10;
                    //                //int indexV;
                    //                do
                    //                {
                    //                    indexV = Program.rm.Next(0, maxValue);
                    //                    maxValue *= 2;
                    //                } while (Program.allTeams.ContainsKey(indexV));

                    //                Program.allTeams.Add(indexV, new Team()
                    //                {
                    //                    captain = teamCreate,
                    //                    CreateTime = DateTime.Now,
                    //                    TeamID = indexV
                    //                });

                    //                //Program.allTeams.Add()
                    //            }
                    //            var teamCreateFinish = new CommonClass.TeamCreateFinish()
                    //            {
                    //                c = "TeamCreateFinish",
                    //                CommandStart = teamCreate.CommandStart,
                    //                TeamNum = indexV,
                    //                WebSocketID = teamCreate.WebSocketID,
                    //                PlayerName = teamCreate.PlayerName
                    //            };
                    //            await sendMsg(teamCreate.FromUrl, Newtonsoft.Json.JsonConvert.SerializeObject(teamCreateFinish));
                    //            //await (prot)
                    //            // await sendInmationToUrl(addItem.FromUrl, notifyJson);
                    //            CommonClass.TeamResult t = new CommonClass.TeamResult()
                    //            {
                    //                c = "TeamResult",
                    //                FromUrl = teamCreate.FromUrl,
                    //                TeamNumber = indexV,
                    //                WebSocketID = teamCreate.WebSocketID
                    //            };
                    //            await context.Response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(t));
                    //        }; break;
                    //}
                }
            });
        }
Beispiel #4
0
        private void teambegain(IApplicationBuilder app)
        {
            //app.Run(async context =>
            //{

            //});
            app.Run(async context =>
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    await dealWithTeamBegain(webSocket);
                }
            });
            return;

            app.Run(async context =>
            {
                if (context.Request.Method.ToLower() == "post")
                {
                    // await context.Response.WriteAsync("ok");
                    var notifyJson = getBodyStr(context);

                    Console.WriteLine($"teambegain receive:{notifyJson}");
                    CommonClass.Command c = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.Command>(notifyJson);

                    switch (c.c)
                    {
                    case "TeamBegain":
                        {
                            CommonClass.TeamBegain teamBegain = Newtonsoft.Json.JsonConvert.DeserializeObject <CommonClass.TeamBegain>(notifyJson);

                            Team t = null;
                            lock (Program.teamLock)
                            {
                                if (Program.allTeams.ContainsKey(teamBegain.TeamNum))
                                {
                                    t = Program.allTeams[teamBegain.TeamNum];
                                }
                                //Program.allTeams.Add()
                            }
                            if (t == null)
                            {
                                await context.Response.WriteAsync("ng");
                            }
                            else
                            {
                                for (var i = 0; i < t.member.Count; i++)
                                {
                                    var secret = CommonClass.AES.AesEncrypt("team:" + teamBegain.RoomIndex.ToString(), t.member[i].CommandStart);
                                    CommonClass.TeamNumWithSecret teamNumWithSecret = new CommonClass.TeamNumWithSecret()
                                    {
                                        c           = "TeamNumWithSecret",
                                        WebSocketID = t.member[i].WebSocketID,
                                        Secret      = secret
                                    };
                                    var json = Newtonsoft.Json.JsonConvert.SerializeObject(teamNumWithSecret);
                                    await sendMsg(t.captain.FromUrl, json);
                                }
                                t.IsBegun = true;
                                await context.Response.WriteAsync("ok");
                            }
                        }; break;
                    }
                }
            });
        }