public override void ProcessPayload(Interfaces.IClient Client, Plugin.IPlugin plugin = null) { lock (Client.Connection.InitializedClasses) { if (Client.Connection.InitializedClasses.ContainsKey(SharedClassId)) { SharedClass initClass = Client.Connection.InitializedClasses[SharedClassId]; Client.Connection.InitializedClasses[SharedClassId].IsDisposed = true; SharedClass localSharedClass = null; lock (Client.Connection.SharedClasses) { if (Client.Connection.SharedClasses.TryGetValue(initClass.SharedName, out localSharedClass)) { localSharedClass.SharedInitializeCounter--; } } Client.Connection.InitializedClasses[SharedClassId] = null; Client.Connection.InitializedClasses.Remove(SharedClassId); } else { //strange client behavior Client.Disconnect(); } } }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { lock (client.Connection.Streams) { if (client.Connection.Streams.ContainsKey(StreamId)) { client.Connection.Streams[StreamId].IsClosed = true; client.Connection.Streams.Remove(StreamId); } } }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { SSPClient c = client as SSPClient; if (c != null) { c.ConnectionClosedNormal = true; if (!client.Connection.InvokedOnDisconnect) { client.Connection.InvokedOnDisconnect = true; c.Disconnect(Reason); } } base.ProcessPayload(client, plugin); }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { SecureStream stream = null; lock (client.Connection.Streams) { if (client.Connection.Streams.ContainsKey(StreamId)) { stream = client.Connection.Streams[StreamId]; } } stream.StreamLock.Value = this; stream.StreamLock.Pulse(); base.ProcessPayload(client, plugin); }
public override void ProcessPayload(Interfaces.IClient client, Plugin.IPlugin plugin = null) { SSPClient Client = client as SSPClient; if (Client.PeerSide == PeerSide.Client) { if (Client.SyncNextRandomId != null) { Client.SyncNextRandomId.Value = this; Client.SyncNextRandomId.Pulse(); } } else if (Client.PeerSide == PeerSide.Server) { RandomId = Client.Server.Random.NextDecimal(); client.Connection.SendMessage(this, PacketId.RequestMessages); } base.ProcessPayload(client, plugin); }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { SecureStream stream = new SecureStream(client, StreamId); lock (client.Connection.Streams) { if (!client.Connection.Streams.ContainsKey(StreamId)) { client.Connection.Streams.Add(stream.StreamId, stream); client.Connection.SendPayload(new MsgOpenStreamResponse(this.StreamId), PacketId.StreamMessages); } else { return; } } client.Connection.Client.onNewStreamOpen(stream); base.ProcessPayload(client, plugin); }
/// <summary> /// Run the program - only once /// </summary> internal void Run() { // Create connection pool and connect virtual clients for database implementation this.Log.Info("Post initializing database implementation"); this.Database.Init(); this.Log.Info("Database implementation initialized"); /* Well... this is kinda tricky... * There can be multiple plugin loaders, by default a FilePluginLoader and an AssemblyPluginLoader * So what I'm doing below is: get all plugins from each plugin loaders and concatenate results * Then I order plugins ascending by their ranking and initialize them in that order. */ this.Log.Info("Loading plugins..."); { // Load plugins with each plugin loader and concentate IEnumerable <Plugin.IPlugin> plugins = new Plugin.IPlugin[] { }; this.PluginLoader.ForEach(x => plugins = plugins.Concat(x.LoadPlugins(this.Config))); // concatenate all plugins loaded by each plugin loader foreach (Plugin.IPluginLoader loader in this.PluginLoader) { plugins = plugins.Concat(loader.LoadPlugins(this.Config)); } // orderby ranking ascending to get correct invocation stack this.Plugins = (from Plugin.IPlugin plugin in plugins orderby plugin.Ranking ascending select plugin).ToArray(); foreach (Plugin.IPlugin plugin in this.Plugins) { plugin.Init(this); } } this.Log.InfoFormat("{0} plugin(s) loaded", this.Plugins.Length); // Start the server and wait for connections this.Server.Start(); this.Log.Info("It's up, Jim! Socks5 server is running gracefully"); // Memory pressure grows and grows... We may clean up manually, to be secure - not sure if this is stupid or not while (true) { GC.Collect(); Thread.Sleep(10 * 1000); } }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { lock (client.Connection.Streams) { if (client.Connection.Streams.ContainsKey(StreamId)) { while (client.Connection.Streams[StreamId].stream.Length > 30000) { client.Connection.Streams[StreamId].StreamLock.Wait <object>(null, 3000); client.Connection.Streams[StreamId].StreamLock = new SyncObject(client); } lock (client.Connection.Streams[StreamId].FlushLock) { client.Connection.Streams[StreamId].stream.Write(data, 0, data.Length); client.Connection.Streams[StreamId].ReadLock.Pulse(); } } } base.ProcessPayload(client, plugin); }
public override void ProcessPayload(Interfaces.IClient client, Plugin.IPlugin plugin = null) { }
public static void AddTile(Plugin.IPlugin _Plugin, string _Name, Core.GameObject.ITile _Tile) { Debug.Logs.Write("[Plugin." + _Plugin.Name + "] <Tile>" + _Plugin.Name + "." + _Name, Debug.LogType.Info); TileKeys.Add(_Plugin.Name + "." + _Name, Tiles.Count()); Tiles.Add(Tiles.Count, _Tile); }
public static void AddEntity(Plugin.IPlugin _Plugin, string _Name, Core.GameObject.IEntity _Entity) { Debug.Logs.Write("[Plugin." + _Plugin.Name + "] <Entity>" + _Plugin.Name + "." + _Name, Debug.LogType.Info); EntityKey.Add(_Plugin.Name + "." + _Name, Entities.Count()); Entities.Add(Entities.Count, _Entity); }
public static void AddBiome(Plugin.IPlugin _Plugin, string _Name, Core.GameObject.Biome _Biome) { Debug.Logs.Write("[Plugin." + _Plugin.Name + "] <Biome>" + _Plugin.Name + "." + _Name, Debug.LogType.Info); BiomeKey.Add(_Plugin.Name + "." + _Name, Biomes.Count()); Biomes.Add(Biomes.Count, _Biome); }
public static void AddItem(Plugin.IPlugin _Plugin, string _Name, Core.GameObject.IItem _Item) { Debug.Logs.Write("[Plugin." + _Plugin.Name + "] <Item>" + _Plugin.Name + "." + _Name, Debug.LogType.Info); ItemKeys.Add(_Plugin.Name + "." + _Name, Items.Count()); Items.Add(Items.Count, _Item); }
public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null) { base.ProcessPayload(client, plugin); }
public override void WritePayload(IClient client, Plugin.IPlugin plugin = null) { base.WritePayload(client, plugin); }