예제 #1
0
 public ComplexController(IRepository complexRepository, ILogger <ComplexController> logger,
                          IRoomServiceSender rss, IAddressRequest ar, IRoomRequest rr)
 {
     _complexRepository = complexRepository ?? throw new ArgumentNullException(nameof(complexRepository), "Complex repo cannot be null");
     _log = logger;
     _roomServiceSender = rss;
     _addressRequest    = ar;
     _roomRequest       = rr;
 }
예제 #2
0
        internal void HandleRoom <TPlayer>(TPlayer ws, RoomManager <TPlayer> rooms, IRoomRequest req)
            where TPlayer : Player, new()
        {
            if (req.RoomId != null && req.RoomType != null)
            {
                // room id & type isn't null, connect them to that room

                var room = rooms.FindOrCreateBy(new RoomRequest(req.RoomId, req.RoomType));

                if (room != null)
                {
                    room.Connect(ws);

                    ws.Socket.Send(ProtoSerializer.Serialize(GetSuccess(true)));
                }
                else
                {
                    ws.Socket.Send(ProtoSerializer.Serialize(GetSuccess(false, "A room of that room type couldn't be found.")));
                }
            }
            else
            {
                // it's null

                if (ws.ConnectedTo != null)
                {
                    // if they're connected somewhere, disconnect them

                    var room = ws.ConnectedTo;
                    DisconnectPlayerFrom(rooms, ((Room <TPlayer>)room), ws);

                    ws.Socket.Send(ProtoSerializer.Serialize(GetSuccess(true)));
                }
                else
                {
                    // send an error
                }
            }
        }