コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
 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);
         }
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: whgfu/socks5serverv2
        /// <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);
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
 public override void ProcessPayload(Interfaces.IClient client, Plugin.IPlugin plugin = null)
 {
 }
コード例 #10
0
 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);
 }
コード例 #11
0
 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);
 }
コード例 #12
0
 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);
 }
コード例 #13
0
 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);
 }
コード例 #14
0
 public override void ProcessPayload(IClient client, Plugin.IPlugin plugin = null)
 {
     base.ProcessPayload(client, plugin);
 }
コード例 #15
0
 public override void WritePayload(IClient client, Plugin.IPlugin plugin = null)
 {
     base.WritePayload(client, plugin);
 }