コード例 #1
0
        public SimplePipe()
        {
            InputStream  = new SimplePipeInputStream <T>(this);
            OutputStream = new SimplePipeOutputStream <T>(this);

            _rendezvous = new MatchingQueue <ReadOnlyMemory <T>, Memory <T>, int, int>(Copy);
        }
コード例 #2
0
ファイル: Main.cs プロジェクト: PupYuan/Online_SpaceShooter
        public static void Main(string[] args)
        {
            RoomMgr       roomMgr       = new RoomMgr();
            Scene         scene         = new Scene();
            MatchingQueue maching_queue = new MatchingQueue();
            //DataMgr dataMgr = new DataMgr ();//管理数据的类,先暂时去除
            ServNet servNet = new ServNet();

            servNet.proto = new ProtocolBytes();
            servNet.Start("127.0.0.1", 1234);

            while (true)
            {
                string str = Console.ReadLine();
                switch (str)
                {
                case "quit":
                    servNet.Close();
                    return;

                case "print":
                    servNet.Print();
                    break;
                }
            }
        }
コード例 #3
0
 public MatchingQueue()
 {
     instance = this;
 }
コード例 #4
0
 public OccasionalObjectLender()
 {
     _matchingQueue = new MatchingQueue <ValueTask <Unit>, LendingData, LendingData, ValueTask <Unit> >(Match);
 }
コード例 #5
0
        protected override async Task OnMessage(MessageEventArgs e)
        {
            using (var rs = new System.IO.StreamReader(e.Data))
            {
                string      json = rs.ReadToEnd();
                NetInfoBase bas  = JsonConvert.DeserializeObject <NetInfoBase>(json);
                Player      ply  = this.BindPlayer;
                json = bas.JsonData;
                if (bas != null && this.OnHallOrder != null)
                {
                    this.OnHallOrder(this, bas);
                }
                try
                {
                    switch ((HallOrderType)bas.OrderType)
                    {
                    case HallOrderType.请求大厅数据:
                    {
                        //绑定IP
                        this.IP = base.Context.UserEndPoint.Address.ToString();
                        Log.Print("玩家" + this.IP + "已连接到服务器");
                        string pid = bas.Tag;
                        Player py  = null;
                        if (Management.HasPlayerInOnline(pid))
                        {
                            py = Management.GetOnlinePlayer(pid);
                        }
                        if (py == null)
                        {
                            py = new Player();
                            Management.AddToOnline(py);
                        }
                        py.SetHallWebSok(this);
                        this.BindPlayer = py;
                        this.SendHallData(new NetPlayer(py), false);
                        break;
                    }

                    case HallOrderType.进入匹配队列:
                    {
                        MatchingQueue.Enqueue(ply);
                        Log.Print("玩家" + this.BindPlayer.Name + "进入了匹配队列");
                        break;
                    }

                    case HallOrderType.退出匹配队列:
                    {
                        Log.Print("玩家" + this.BindPlayer.Name + "退出了匹配队列");
                        MatchingQueue.Remove(ply.PlayerID);
                        break;
                    }

                    case HallOrderType.更新玩家信息:
                    {
                        var info = JsonConvert.DeserializeAnonymousType(json, new
                            {
                                name   = "",
                                roleid = 1,
                                headid = 1,
                                gender = 0,
                            });
                        Management.UpdatePlayer(ply.PlayerID, info.headid, info.roleid, info.gender, info.name);
                        break;
                    }

                    case HallOrderType.创建房间:
                    {
                        var      rom  = JsonConvert.DeserializeAnonymousType(json, new { pwd = "", bts = 0 });
                        GameRoom room = new GameRoom(ply, rom.bts, RoomModel.Room, rom.pwd);
                        ply.RoomWhich = room;
                        Management.AddRoom(room);
                        this.SendData(JsonConvert.SerializeObject(new { pid = BindPlayer.PlayerID, roomid = room.RoomID }), HallOrderType.房间创建完毕);
                        break;
                    }

                    case HallOrderType.请求房间列表:
                    {
                        //获取房间信息
                        var roms = Management.GetRooms().Select(r =>
                            {
                                return(new NetRoom()
                                {
                                    RoomID = r.RoomID.ToString(),
                                    BtScore = r.BtScore,
                                    MasterName = r.RoomMaster.Name,
                                    MasterHead = r.RoomMaster.HeadID,
                                    NowCount = r.MemberCount,
                                });
                            }).ToArray();
                        var romjson = JsonConvert.SerializeObject(roms);
                        ply.SendHallData(romjson, HallOrderType.推送房间列表);
                        break;
                    }

                    case HallOrderType.请求排名信息:
                    {
                        //获取排名信息
                        var rks    = Management.GetAllPlayers().OrderBy(r => long.Parse(r.Mark)).ToArray();
                        var rkjson = JsonConvert.SerializeObject(rks);
                        ply.SendHallData(rkjson, HallOrderType.推送排名信息);
                        break;
                    }
                    }
                }
                catch (Exception ex)
                {
                    Log.Print(ex.Message, ConsoleColor.Red);
                }
            }
        }