// Constructor public TextEditor2ViewModel(KoreManager kore, KoreFileInfo koreFile) { _kore = kore; KoreFile = koreFile; _adapter = KoreFile.Adapter as ITextAdapter; GameAdapters = _kore.GetAdapters <IGameAdapter>().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "84D2BD62-7AC6-459B-B3BB-3A65855135F6") ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "B344166C-F1BE-49B2-9ADC-38771D0A15DA") ?? GameAdapters.First(); SelectedZoomLevel = 1; } // Direct entry loading is now dead since GameAdapters have become a thing //if (_adapter != null) // Entries = new ObservableCollection<TextEntry>(_adapter.Entries); SelectedEntry = Entries?.FirstOrDefault(); }
private static void LoadGameAdapters() { var adaptersPath = Path.Combine(Environment.CurrentDirectory, "adapters"); if (!Directory.Exists(adaptersPath)) { Directory.CreateDirectory(adaptersPath); } var files = Directory.EnumerateFiles(adaptersPath, "*.dll", SearchOption.TopDirectoryOnly); foreach (var file in files) { var defaultAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file); var exportedTypes = defaultAssembly.GetExportedTypes(); foreach (var exportedType in exportedTypes) { if (!typeof(IGameAdapter).IsAssignableFrom(exportedType)) { continue; } if (exportedType.IsAbstract) { continue; } var gameAdapter = Activator.CreateInstance(exportedType); GameAdapters.Register((IGameAdapter)gameAdapter); } } }
// Constructor public TextEditor2ViewModel(PluginManager pluginManager, IStateInfo koreFile) { _pluginManager = pluginManager; KoreFile = koreFile; _state = KoreFile.PluginState as ITextState; GameAdapters = pluginManager.GetGameAdapters().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.PluginId == Guid.Parse("84D2BD62-7AC6-459B-B3BB-3A65855135F6")) ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.PluginId == Guid.Parse("B344166C-F1BE-49B2-9ADC-38771D0A15DA")) ?? GameAdapters.First(); SelectedZoomLevel = 1; } SelectedEntry = Entries?.FirstOrDefault(); }
private static void Main(string[] args) { var currentThread = Thread.CurrentThread; currentThread.Name = "Server"; Logger.Debug("Fetching {0} argument(s)", args.Length); var executingAssembly = Assembly.GetExecutingAssembly(); var assemblyName = executingAssembly.GetName(); Console.Title = assemblyName.Name + " " + assemblyName.Version; Console.CancelKeyPress += HandleCancelKeyPressed; Logger.Info("Configuring libraries..."); ConfigureLibraries(); Logger.Info("Loading game adapters..."); LoadGameAdapters(); var serverAdapter = GameAdapters.Lock(); if (serverAdapter == null) { Logger.Error("No game adapter found"); return; } _server = new GameServer(serverAdapter); Console.Title = _server.Name; _server.Start(); }
// Constructor public TextEditor2ViewModel(FileManager fileManager, PluginLoader pluginLoader, KoreFileInfo koreFile) { _fileManager = fileManager; _pluginLoader = pluginLoader; KoreFile = koreFile; _adapter = KoreFile.Adapter as ITextAdapter; GameAdapters = _pluginLoader.GetAdapters <IGameAdapter>().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "84D2BD62-7AC6-459B-B3BB-3A65855135F6") ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "B344166C-F1BE-49B2-9ADC-38771D0A15DA") ?? GameAdapters.First(); SelectedZoomLevel = 1; } SelectedEntry = Entries?.FirstOrDefault(); }
public void HandleLoginRequest(string username) { // "Login request" message already received if (_username != null) { return; } if (!GameAdapters.IsSupported(NetworkClient.Version.Protocol)) { NetworkClient.Disconnect(new TextComponentString("Unsupported version " + NetworkClient.Version.Protocol) { Color = TextColor.Red }); return; } _username = username; using (var rngProvider = new RNGCryptoServiceProvider()) { _signature = new byte[4]; rngProvider.GetBytes(_signature); } NetworkClient.Send(new MessageClientEncryptionRequest.Message( string.Empty, Cryptography.PublicKey, _signature )); }
public void HandleHandshake(HandshakeMessage.Message message) { NetworkClient.Version = GameAdapters.IsSupported(message.Protocol) ? GameAdapters.GetVersion(message.Protocol) : new GameVersion("Unknown", message.Protocol); NetworkClient.State = message.RequestedState switch { 1 => (NetworkState)StatusState.Instance, 2 => (NetworkState)LoginState.Instance, _ => throw new NotSupportedException("Invalid requested state: " + message.RequestedState) }; } }
public void LoadChunk(ChunkPosition position) { if (IsLoaded(position)) { Logger.Warn("Trying to load an already loaded chunk at {0}", position); return; } // TODO use Client's adapter var version = GameAdapters.CurrentVersion; var adapter = GameAdapters.Resolve(version.Protocol); var chunk = RenderChunk(position, new GlobalBlockPalette(adapter.BlockRegistry)); _loadedChunks[position] = chunk; _client.Connection.LoadChunk(position, chunk); ChunkLoaded?.Invoke(this, new ChunkEventArgs(position, chunk)); }
public void HandleInfoRequest() { var version = GameAdapters.IsSupported(NetworkClient.Version.Protocol) ? NetworkClient.Version : GameAdapters.CurrentVersion; var status = new ServerStatus( version, new PlayerInfo( 0, 20, new GameProfile[0] ), new TextComponentString("Using game adapter ") { Color = TextColor.Green, Children = { new TextComponentString(version.ToString()) } } ); NetworkClient.Send(new MessageClientServerInfo.Message(status)); }
private void RequestSession(string ip = null) { var serverHash = Cryptography.GetServerHash( EmptyArrays.EmptyBytes, _sharedSecret, Cryptography.PublicKey ); var urlBuilder = new UriBuilder(HasJoinedUrl); var queryString = new NameValueCollection { ["username"] = _username, ["serverId"] = serverHash }; if (ip != null) { queryString["ip"] = ip; } urlBuilder.Query = string.Join("&", queryString.AllKeys.Select(key => key + '=' + queryString.Get(key))); Logger.Debug("Requesting player profile for user \"{0}\" (query: {1})", _username, urlBuilder.Query); HttpClient .GetAsync(urlBuilder.Uri) .ContinueWith(requestTask => { if (requestTask.IsFaulted) { throw requestTask.Exception; } var responseMessage = requestTask.Result; if (responseMessage.StatusCode != HttpStatusCode.OK) { NetworkClient.Disconnect(new TextComponentTranslate("multiplayer.disconnect.authservers_down") { Color = TextColor.Red }); return; } var httpContent = responseMessage.Content; httpContent .ReadAsStringAsync() .ContinueWith(readTask => { _profile = JsonConvert.DeserializeObject <GameProfile>(readTask.Result); if (!_username.Equals(_profile.Name)) { NetworkClient.Disconnect( new TextComponentTranslate("multiplayer.disconnect.unverified_username") { Color = TextColor.Red }); return; } Logger.Info("UUID of player {0} is {1}", _profile.Name, _profile.Id); NetworkClient .Send(new MessageClientEnableCompression.Message(CompressionThreshold)) .ContinueWith(CheckErrors) .ContinueWith(t1 => { if (NetworkClient.Closed) // encryption gone wrong { return; } NetworkClient.EnableCompression(CompressionThreshold); NetworkClient .Send(new MessageClientLoginResponse.Message( _profile.Id.ToString(), _profile.Name )) .ContinueWith(CheckErrors) .ContinueWith(t2 => { if (NetworkClient.Closed) // compression gone wrong { return; } _adapter = GameAdapters.Resolve(NetworkClient.Version.Protocol); NetworkClient.State = _adapter.NetworkState; NetworkClient.AddTask(FinalizeLogin); }); }); }).ContinueWith(CheckErrors); }).ContinueWith(CheckErrors); }