Ejemplo n.º 1
0
 public WarService(IActiveWar activeWar,
                   ICurrentUser player,
                   IRepository <War> warRepo,
                   UserManager <User> userManager,
                   IObserver <ActiveWarVm> warObserver)
 {
     _activeWar     = activeWar;
     _currentPlayer = player;
     _warRepo       = warRepo;
     _userManager   = userManager;
     _warObserver   = warObserver;
 }
 public InvitationsController(UserManager <User> userManager,
                              IRepository <Invitation> invitationRepo,
                              IRepository <War> warRepo,
                              ICurrentUser player,
                              IActiveWar activeWar,
                              FieldBuilder fieldBuilder,
                              GameConfig config,
                              NotificationsService notifServ)
 {
     _userManager    = userManager;
     _invitationRepo = invitationRepo;
     _warRepo        = warRepo;
     _player         = player;
     _activeWar      = activeWar;
     _fieldBuilder   = fieldBuilder;
     _config         = config;
     _notifServ      = notifServ;
 }
Ejemplo n.º 3
0
 public WarObserver(IActiveWar activeWar, IWarSessionManager warSessionManager)
 {
     _activeWar         = activeWar;
     _warSessionManager = warSessionManager;
 }
Ejemplo n.º 4
0
 public HomeController(ICurrentUser player, IActiveWar activeWar)
 {
     _activeWar = activeWar;
     _player    = player;
 }
Ejemplo n.º 5
0
        public async Task Invoke(HttpContext context,
                                 IWarSessionManager sessionManager,
                                 UserManager <User> userManager,
                                 WarService warService,
                                 IActiveWar activeWar)
        {
            if (context.WebSockets.IsWebSocketRequest)
            {
                var requestSocket = await context.WebSockets.AcceptWebSocketAsync();

                var currentUserId = userManager.GetUserId(context.User);

                var newWarSession = new WarSession(currentUserId, requestSocket);
                sessionManager.Add(newWarSession);

                while (requestSocket.State == WebSocketState.Open)
                {
                    var buffer   = new ArraySegment <byte>(new byte[4096]);
                    var received = await requestSocket.ReceiveAsync(buffer, CancellationToken.None);

                    var competitorId = activeWar.CompetitorId;

                    switch (received.MessageType)
                    {
                    case WebSocketMessageType.Text:
                        var receivedJson = Encoding.UTF8.GetString(buffer.Array,
                                                                   buffer.Offset,
                                                                   buffer.Count);

                        var shotParam  = JsonConvert.DeserializeObject <ShotVm>(receivedJson);
                        var shotResult = await warService.ShotAsync(shotParam);

                        var warModel = shotResult.Item1;
                        var errorMsg = shotResult.Item2;

                        var currentPlayerRespMsg = new SocketRespMsg
                        {
                            Content      = warModel,
                            ErrorMessage = errorMsg,
                            State        = errorMsg == null ? Success : Failure
                        };
                        await SendAsync(requestSocket, currentPlayerRespMsg);

                        if (currentPlayerRespMsg.State == Success)
                        {
                            var competotorSession = sessionManager.Find(competitorId);
                            if (competotorSession != null)
                            {
                                var competotorSocket = competotorSession.Socket;
                                if (competotorSocket.State == WebSocketState.Open)
                                {
                                    var competitorWarModel = await warService.FindAsync(competitorId);
                                    await SendAsync(competotorSocket, new SocketRespMsg { Content = competitorWarModel, State = Success });
                                }
                            }
                        }

                        break;
                    }
                }

                await Task.FromResult(0);
            }
            else
            {
                await _next(context);
            }
        }