public bool AddAbonent(Abonent ab, String pass) { if (this.password == pass) return this.AddAbonent(ab); else return false; }
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; } }
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; }
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) { } }
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; } } }
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; } } }
protected void RemoveFromAbList(Abonent ab) { lock (listlocker) { abnsList.Remove(ab); } }
protected abstract void AfterRecieveCommand(AbonentsCommandMessage acMsg, Abonent ab);
protected void AddToAbList(Abonent ab) { lock (listlocker) { abnsList.Add(ab); } }
public void RemoveAbonent(Abonent ab) { RemoveFromAbList(ab); ab.CurrentRoom = null; capacity--; }