예제 #1
0
 public bool AddAbonent(Abonent ab, String pass)
 {
     if (this.password == pass)
         return this.AddAbonent(ab);
     else
         return false;
 }
예제 #2
0
        public bool AddAbonent(Abonent ab)
        {
            try
            {
                if (ab.Status != AbonentStatusEnum.Authorized && Id != 0)
                    return false;
                if (CanAddAbonent)
                {
                    AddToAbList(ab);
                    ab.CurrentRoom = this;
                    capacity++;
                    if (this.Id==0)
                    {
                        var roomsmsg = new ServerInfoRoomsMessage() { Rooms = Program.GetRoomsInfo() };
                        ab.SendMessage(roomsmsg.GetTC());
                    }
                    ab.Sender.BeginReceive(new AsyncCallback(AfterRecieve), ab);
                    return true;
                }
                else
                    return false;
            }
            catch (Exception ex)
            {

                return false;
            }
        }
예제 #3
0
 public ObjectController(Abonent ab)
 {
     room = ab.CurrentRoom.GetGameRoomInfo();
     gamer = ab.Gamer;
     this.Id = ab.Gamer.UserId;
     this.Sender = ab.Sender;
     this.Name = ab.Gamer.Name;
 }
예제 #4
0
        private static void Listen_Callback(IAsyncResult ar)
        {
            try
            {
                Socket servSock = (Socket)ar.AsyncState;
                Socket clientSock = servSock.EndAccept(ar);
                Abonent ab = new Abonent() { Status = AbonentStatusEnum.Guest, Gamer = new GameAbonentInfo() { Name = "Guest" + number, Id = number }, Sender =new SingleSender(clientSock) };
                number++;
                Lobby.AddAbonent(ab);
                servSock.BeginAccept(new AsyncCallback(Listen_Callback), servSock);
            }
            catch(Exception ex)
            {

            }
        }
예제 #5
0
        protected override void AfterRecieveCommand(AbonentsCommandMessage acMsg, Abonent ab)
        {
            switch (acMsg.Type)
            {
                case AbonentsCommandType.ExitRoom:
                    {
                        bool done = false;

                        RemoveAbonent(ab);
                            Program.Lobby.AddAbonent(ab);
                            if (ab.Gamer.Id == this.Owner.Id)
                            {
                                AfterRemoveOwner();
                            }
                            done = true;
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        SendRoomStatusMessage();
                        Program.Lobby.SendRoomStatusMessage();
                        break;
                    }
                case AbonentsCommandType.Exit:
                    {
                        this.RemoveAbonent(ab);
                        ab.Gamer.Name = "Guest" + ab.Gamer.Id;
                        ab.Gamer.UserId = 0;
                        ab.Status = AbonentStatusEnum.Disconnected;
                        if (ab.Gamer.Id == this.Owner.Id)
                        {
                            AfterRemoveOwner();
                        }
                        SendRoomStatusMessage();
                        break;
                    }
                case AbonentsCommandType.StartRoom:
                    {
                        bool done = false;
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            MultiPlayerGame game = new MultiPlayerGame(this.AbnsToList(),);
                            game.Start(AfterGameEnd);
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        break;
                    }
                case AbonentsCommandType.KickUser:
                    {
                        bool done = false;
                        KickUserMessage kickmsg = (KickUserMessage)acMsg.GetInnerMessage();
                        Abonent kickedab = this.AbnsToList().FirstOrDefault(a => a.Gamer.Id==kickmsg.UserId);
                        if (kickedab!=null)
                        {
                            this.RemoveAbonent(kickedab);
                                Program.Lobby.AddAbonent(kickedab);
                                done = true;
                        }
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        SendRoomStatusMessage();
                        Program.Lobby.SendRoomStatusMessage();
                        break;
                    }

            }
        }
예제 #6
0
        protected override void AfterRecieveCommand(AbonentsCommandMessage acMsg, Abonent ab)
        {
            switch (acMsg.Type)
            {
                case AbonentsCommandType.Authorization:
                    {
                        bool done = false;
                        AuthorizationMessage amsg = (AuthorizationMessage)acMsg.GetInnerMessage();
                        //реализация логики авторизации пока пусть будет типа авторизован
                        ab.Status = AbonentStatusEnum.Authorized;
                        ab.Gamer.Id = usrid;
                        ab.Gamer.UserId = usrid;
                        usrid++;
                        ab.Gamer.Name = amsg.Login;
                        done = true;
                        if (amsg.NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        SendRoomStatusMessage();

                        break;
                    }
                case AbonentsCommandType.UnAuthorization:
                    {
                        bool done = false; ;

                        ab.Gamer.Name = "Guest" + ab.Gamer.Id;
                        ab.Gamer.UserId = 0;
                        ab.Status = AbonentStatusEnum.Guest;
                        done = true;
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        SendRoomStatusMessage();
                        break;
                    }
                case AbonentsCommandType.Exit:
                    {
                        RemoveAbonent(ab);
                        ab.Gamer.Name = "Guest" + ab.Gamer.Id;
                        ab.Gamer.UserId = 0;
                        ab.Status = AbonentStatusEnum.Disconnected;
                        SendRoomStatusMessage();
                        break;
                    }
                case AbonentsCommandType.CreateRoom:
                    {
                        bool done = false;
                        CreateRoomMessage crmsg = (CreateRoomMessage)acMsg.GetInnerMessage();
                        GameRoom room = new GameRoom(roomnumber, crmsg.Name, crmsg.Password, ab.Gamer, crmsg.Capability);
                        Program.Rooms.Add(room);
                        RemoveAbonent(ab);
                        room.AddAbonent(ab);
                            done = true;
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        ab.CurrentRoom.SendRoomStatusMessage();
                        SendRoomStatusMessage();
                        var roomsmsg = new ServerInfoRoomsMessage() { Rooms = Program.GetRoomsInfo() };
                        Program.Lobby.SendMessage(roomsmsg.GetTC());
                        break;
                    }
                case AbonentsCommandType.JoinRoom:
                    {
                        bool done = false;
                        JoinRoomMessage jrmsg = (JoinRoomMessage)acMsg.GetInnerMessage();
                        if (jrmsg.RoomId > 0)
                        {
                            GameRoom room = (GameRoom)Program.Rooms.FirstOrDefault(r => r.Id == jrmsg.RoomId);
                            if (room != null)
                            {
                                this.RemoveAbonent(ab);
                                    room.AddAbonent(ab, jrmsg.Password);
                                    done = true;
                            }
                        }
                        if (acMsg.GetInnerMessage().NeedConfirm)
                        {
                            ServerConfirmMessage confirm = new ServerConfirmMessage() { Accept = done, RefMsgId = acMsg.MsgId };
                            var smsg = confirm.GetTC();
                            ab.SendMessage(smsg);
                        }
                        SendRoomStatusMessage();
                        break;
                    }
                case AbonentsCommandType.RequestRoomInfo:
                    {
                        ServerInfoRoomsMessage riMessage = new ServerInfoRoomsMessage() { Rooms = Program.GetRoomsInfo() };
                        var smsg = riMessage.GetTC();
                        ab.SendMessage(smsg);
                        break;
                    }

            }
        }
예제 #7
0
 protected void RemoveFromAbList(Abonent ab)
 {
     lock (listlocker)
     {
         abnsList.Remove(ab);
     }
 }
예제 #8
0
 protected abstract void AfterRecieveCommand(AbonentsCommandMessage acMsg, Abonent ab);
예제 #9
0
 protected void AddToAbList(Abonent ab)
 {
     lock (listlocker)
     {
         abnsList.Add(ab);
     }
 }
예제 #10
0
 public void RemoveAbonent(Abonent ab)
 {
     RemoveFromAbList(ab);
     ab.CurrentRoom = null;
     capacity--;
 }