Ejemplo n.º 1
0
int main(int argc, char* argv[])
{
    int Error;
	char text[1024];

	Server = Srv_Create();

    // Share some resources with our virtual PLC
    Srv_RegisterArea(Server,
		     srvAreaDB,     // We are registering a DB
                     1,             // Its number is 1 (DB1)
                     &DB1,          // Our buffer for DB1
                     sizeof(DB1));  // Its size
    // Do the same for DB2 and DB3
    Srv_RegisterArea(Server, srvAreaDB, 2, &DB2, sizeof(DB2));
    Srv_RegisterArea(Server, srvAreaDB, 3, &DB3, sizeof(DB3));

    // change component identification
    Srv_SetSZL(Server, SZL_ID_001C, SZLC_ID_001C_IDX_XXXX,
    			sizeof(SZLC_ID_001C_IDX_XXXX));

    // Set the event callback to show something : it's not strictly needed.
    // If you comment next line the server still works fine.
    Srv_SetEventsCallback(Server, EventCallBack, NULL);

    // Start the server onto the default adapter.
    // To select an adapter we have to use Srv_StartTo(Server, "192.168.x.y").
    // Start() is the same of StartTo("0.0.0.0");
    Error=Srv_Start(Server);
    if (Error==0)
    {
	// Now the server is running ... wait a key to terminate
        getchar();
    }
    else
	{
        Srv_ErrorText(Error, text, 1024);
        printf("%s\n", text);
	}

    // If you got a start error:
    // Windows - most likely you ar running the server in a pc on wich is
    //           installed step 7 : open a command prompt and type
    //             "net stop s7oiehsx"    (Win32) or
    //             "net stop s7oiehsx64"  (Win64)
    //           And after this test :
    //             "net start s7oiehsx"   (Win32) or
    //             "net start s7oiehsx64" (Win64)
    // Unix - you need root rights :-( because the isotcp port (102) is
    //        low and so it's considered "privileged".

    Srv_Stop(Server); // <- not strictly needed, every server is stopped on deletion
                    //    and every client is gracefully disconnected.
	Srv_Destroy(&Server);
	return 0;
}
Ejemplo n.º 2
0
//==============================================================================
// SERVER
//==============================================================================
TS7Server::TS7Server()
{
    Server=Srv_Create();
}
Ejemplo n.º 3
0
/* ------------------------------------------------------------------------- */
void TestServer()
{
    g_Mock_accept = Mock_accept;
    g_Mock_socket = Mock_socket;
    g_Mock_poll = Mock_poll;
    g_Mock_timerfd_create = Mock_timerfd_create;
    g_Mock_bind = Mock_bind;

    {
        Srv_TServer *srv;
        EL_TLoop *const loop = EL_CreateLoop();

        s_test_case = 0;
        {
            srv = Srv_Create(loop, OnNewSession, 0);
            assert(!srv);
        }

        s_test_case = 1;
        {
            srv = Srv_Create(loop, OnNewSession, 0);
            assert(!srv);
        }

        s_test_case = 2;
        {
            srv = Srv_Create(loop, OnNewSession, 0);
            assert(srv);
        }

        s_test_case = 3;
        {
            /* accept fails */
            EL_RunOnce(loop, 0);
            assert(!s_sessions[0]);
            assert(0 == s_on_new_session_count);
        }

        s_test_case = 4;
        {
            /* connection request declined */
            EL_RunOnce(loop, 0);
            assert(!s_sessions[0]);
            assert(1 == s_on_new_session_count);
        }

        s_test_case = 5;
        {
            /* create a new session */
            EL_RunOnce(loop, 0);
            assert(s_sessions[0]);
            assert(Mem_RefCount(s_sessions[0]) == 2);
            assert(2 == s_on_new_session_count);
        }

        s_test_case = 6;
        {
            /* test the new session io callback */
            EL_RunOnce(loop, 0);
            assert(s_sessions[0]);
            assert(2 == s_on_new_session_count);
            assert(1 == s_on_session_io_count);
        }

        s_test_case = 7;
        {
            /* create a new session */
            EL_RunOnce(loop, 0);
            assert(s_sessions[1]);
            assert(Mem_RefCount(s_sessions[1]) == 2);
            assert(3 == s_on_new_session_count);
            assert(1 == s_on_session_io_count);
        }

        s_test_case = 8;
        {
            /* simulate peer closing connection */
            EL_RunOnce(loop, 0);
            assert(Mem_RefCount(s_sessions[0]) == 2);
            assert(Mem_RefCount(s_sessions[1]) == 1);
            Srv_FreeSession((Srv_TSession*)s_sessions[1]);
            assert(3 == s_on_new_session_count);
            assert(1 == s_on_session_io_count);
            assert(1 == s_on_terminate_session_count);
        }

        s_test_case = 9;
        {
            /* create a new session */
            EL_RunOnce(loop, 0);
            assert(s_sessions[1]);
            assert(Mem_RefCount(s_sessions[1]) == 2);
            assert(4 == s_on_new_session_count);
            assert(1 == s_on_session_io_count);
        }

        s_test_case = 10;
        {
            /* simulate the session timer expiration */
            EL_RunOnce(loop, 0);
            assert(s_sessions[1]);
            assert(Mem_RefCount(s_sessions[1]) == 1);
            Srv_FreeSession((Srv_TSession*)s_sessions[1]);
            assert(4 == s_on_new_session_count);
            assert(1 == s_on_session_io_count);
            assert(2 == s_on_terminate_session_count);
        }

        s_test_case = 11;
        {
            /* one session is still attached */
            Srv_Free(srv);
            assert(3 == s_on_terminate_session_count);
            assert(Mem_RefCount(s_sessions[0]) == 1);
            Srv_FreeSession((Srv_TSession*)s_sessions[0]);
        }

        EL_FreeLoop(loop);
    }

    g_Mock_fcntl = DefMock_fcntl;
    g_Mock_setsockopt = DefMock_setsockopt;
    g_Mock_accept = DefMock_accept;
    g_Mock_socket = DefMock_socket;
    g_Mock_bind = DefMock_bind;
    g_Mock_timerfd_create = DefMock_timerfd_create;
    g_Mock_poll = DefMock_poll;
}