GithubHelp home page GithubHelp logo

aumcode / nfx Goto Github PK

View Code? Open in Web Editor NEW
390.0 52.0 93.0 30.96 MB

C# Server UNISTACK framework [MOVED]

Home Page: https://github.com/agnicore/nfx

License: Other

C# 84.92% JavaScript 12.36% HTML 2.06% CSS 0.05% Erlang 0.51% Batchfile 0.03% Shell 0.07%
c-sharp nfx unistack serialization glue ipc cluster wave big-memory pile

nfx's Introduction

NFX - .NET Unified Software Stack + Big Memory

Azos ANNOUNCEMENT

Azos is based on .Net Standard 2, having all cli tools targeting both .NET FX 4.7.1+ and .NET Core 2+. Azos does not support fx < 4.7.1 (though possible).

NFXv3* (this repository) will continue to target .NET 4.5/Mono and may get some support for major bug fixes however all new feature development is going to happen in the NEW REPO for Azos.

Logo

Server UNISTACK (unified full software stack, no 3rd paty libs) framework.

Project Badge

Documentation http://nfxlib.com

nfx's People

Contributors

filmor avatar gitter-badger avatar itadapter avatar leo-gan avatar olegpanagushin avatar saleyn avatar vlapchenko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nfx's Issues

Samples?

Your stuff looks interesting, would be good to have a few sample projects to play with.

Add Pile.Put(PilePointer) to overwrite exisitng pointer, prealloc buffer + linking

Something akin to:

    /// <summary>
    /// Tries to put the new object over an existing one at the pre-define position.
    /// The pointer has to reference a valid allocated block.
    /// If object fits in the allocated block returns true, otherwise tries to create an internal link
    /// to the new pointer which is completely transparent to the caller. The linking may be exlicitly disabled
    /// in which case the method returns false when the new object does not fit into the existing block
    /// </summary>
    /// <param name="obj">A new/modified CLR object to put into the Pile over an existing one</param>
    /// <param name="lifeSpanSec">
    ///  Optional lifeSpanSec will auto-delete object after the interval elapses if
    ///  the pile SupportsObjectExpiration and SweepExpiredObjects is set to true
    /// </param>
    /// <param name="ptr">The pointer to the existing valid allocated block</param>
    /// <param name="link">False to prohibit internal pointer linking</param>
    /// <returns>True if object was inserted, false otherwise (i.e. when linking is false)</returns>
    bool Put(PilePointer ptr, object obj, uint lifeSpanSec = 0, bool link = true);

Erlang receive RPC

Thank you for this great library!
Just got one question, is there a method in Erlang module that can receive RPC calls from Erlang node? Thx.

Casting issues in NFX.Erlang

The implicit cast from ErlLong to int is very dangerous and indeed led to errors in the library code. Here is a snippet from the ErlOutputStream.cs file which contains a bug that we discovered recently:

public void WriteLong(ErlLong l) { writeLong(l, l < 0); }
private void writeLong(long l, bool isNegative);

If l is positive but greater than int.MaxValue then the condition will evaluate to true meaning l will be serialized as a negative number (because l is cast to an int for the less-than operator). The solution is simple:

public void WriteLong(ErlLong l) { writeLong(l, l < 0L); }

I suggest you make the ErlLong to int cast explicit to avoid these subtle bugs in the library code and make clear for the users where data loss might happen on their part.

Mongo lost TCP connection

Hey dude! I have this issue now: Mongo server gets turned off. I get a message from the closed socket and then it gets stuck as I see in log "Invalid operation" on closed socket or smth like this. What it looks like to me - something gets stuck, like a socket. I did not have time to investigate. How to reproduce: connect to mongo using your nfx driver then tear the server down, then bring it back alive - my client app is lost now. Any help will be highly appreciated!!!! I use Mongo for high-speed queue in my project and your driver showed substantial speed-up over the "official"one provided by them

thanks,
Chad

Create CMS concept for WAVE

Need to have CMS functionality for portals.
Base on virtual file system - revisions - approve/unapprove by content admin.
Basically a catalog of structured resources: files, configs, NLSmaps, menus
and page templates . tbd email templates

Packaging

Perhaps packaging things like the erlang connectivity outside of the nfx package would be reasonable?

There is a whole ton of stuff in nfx and I imagine the set of people who want to use everything in nfx does not overlap well with people who want to use erlang connectivity.

Also I noticed lack of things like SecureString is this because these are bloated or?

Erlang list parsing is incomplete

According to the Erlang external term format documentation the list term has a Tail that usually is a Nil (or any other type, for that matter). Current implementation of the list parser misses a Nil for the tail, therefore parsing nested lists incorrectly.

Here is a fix:

public ErlList ReadList()
{
    int arity = readListHead();
    if (arity == 0)
        return new ErlList();

    var list = new List<IErlObject>(arity);
    for (int i=0; i < arity; i++)
        list.Add(Read());

    // Read list tail
    if ((ErlExternalTag)m_Buffer[m_Position] == ErlExternalTag.Nil) {
        Read();
    } else {
        list.Add(Read());
    }

    return new ErlList(list, false);
}

Also, the ErlExternalTag.String case is superfluous in the readListHead() method in ErlInputStream.

JS Compiler: direct insertions into js code

Please, extend syntax of JS Compiler to make insertions of source laconf into js code directly, like:

var dlg = new WAVE.GUI.Dialog({
  header: "Some Infromation",
  body: /*** div { h2="Header" {} p="Paragraph" {}  }  ***/
  ...
});

Configuration thread safety - review

Do we need loc{} on attributes and section gets?
Better yet create new instance on mutations, not gets as confs are read-only primarily.

On the other hand this micro optimization is not that important as config is mostly string based and "heavy" anyway

Get rid of NUnit Assert.AreEqual()

The
Assert.AreEqual() is improperly implemented, i.e. it gives precedence to IEnumerable<>
which is used along with SequenceEquals() which is wrong.

That makes testing unpredictable in many places where some class may change interface and
that would completely silently change all of the unit tests meanings.
ArEqual() must use object.Equal only.

How do I run all integ tests?

I want to run all integrations but apparently there are configs missing or smth. Please help as I want to check out your stripe thing

Contributing

Are there any particular things you would like followed on contributions?

One thing I may see get some pushback in the style is the use of m_ as most people will have to reconfigure their tooling for it.

Locale cache overwrites entries when table key is not an <int>. See test modified from [PutGetWithoutMaxCap]

[Test]
public void T080_PutGetWithoutMaxCap_key_as_string()
{
using (var cache = makeCache())
{
var tA = cache.GetOrCreateTable("A");

            const int CNT = 80000000;
            for (var i = 0; i < CNT; i++)
            {
                var pr = tA.Put(i.ToString(), "value" + i.ToString(), priority: 10);
                // Console.WriteLine("{0} -> {1}", i, pr);
                Assert.IsTrue(pr == PutResult.Inserted);//fails here even though key values are unique
            }
        }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.