Как реализовать SuperSocket

Я пытаюсь реализовать Supersockets - https://supersocket.codeplex.com/ для проекта, над которым я работаю. У меня есть сервер, который использует конфигурацию для запуска. В моем проекте

Я ссылался на:

SuperSocket.Common,
SuperSocket.SocketBase,
SuperSocket.SocketEngine

Я добавил следующий раздел конфигурации:

 <configSections>
    <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <appSettings>
    <add key="ServiceName" value="SomeService" />
    </appSettings>
    <superSocket logFactory="ConsoleLogFactory"
              disablePerformanceDataCollector="true"
              maxWorkingThreads="500"
              maxCompletionPortThreads="500"
              minWorkingThreads="5"
              minCompletionPortThreads="5">
    <servers>
      <server name="SomeService"
              serverType="SomeService.Server.SomeService, SomeService"
              ip="192.168.1.107"
              port="4096"
              disableSessionSnapshot="true"
              clearIdleSession="false"
              maxConnectionNumber="10"
              sendWelcome="false">
      </server>
    </servers>
    <logFactories>
      <add name="ConsoleLogFactory"
           type="SuperSocket.SocketBase.Logging.ConsoleLogFactory, SuperSocket.SocketBase" />
    </logFactories>
    </superSocket>

Я также создал сервер и класс сеанса следующим образом:

 namespace SomeService.Server
    {

    class SomeService: AppServer<SomeServiceSession>
    {

        protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
        {

            return base.Setup(rootConfig, config);
        }

        protected override void OnStartup()
        {
            base.OnStarted();
        }

        protected override void OnStopped()
        {
            base.OnStopped();
        }

    }
    }

    namespace SomeService.Server
    {
    class SomeServiceSession : AppSession<SomeServiceSession>
    {
        protected override void OnSessionStarted()
        {
            // this.Send("Welcome to SuperSocket Telnet Server");
        }

        protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
        {
            this.Send("Unknow request");
        }

        protected override void HandleException(Exception e)
        {
            this.Send("Application error: {0}", e.Message);
        }

        protected override void OnSessionClosed(CloseReason reason)
        {
            //add you logics which will be executed after the session is closed
            base.OnSessionClosed(reason);
        }
    }
    }

В этот момент сервер работает и прослушивает порт, как и предполагалось. Вот проволочное представление о том, что я хотел бы сделать с SuperSocket http://imgur.com/rxKJbOD. Если вы видите на запросе ответ один патрон данных:

.MSH|^~\&|MRI|ABC|||201403251406||QRY|173883426|P|2.1
QRD|201403251406|R|I|xxxxx|||25^RD|AB851656^|MPI
QRF|UPI||||
.

от клиента и

.MSH|^~\&|MRI|ABC|||201403251406||QRY|173883426|P|2.1
QRD|201403251406|R|I|xxxx|||25^RD|AB851656^|MPI
QRF|UPI||||
MSA|AA|173883426
.

это с сервера. возвращаемый ответ варьируется в зависимости от запроса и того, что создается после выполнения бизнес-логики (но это всегда будет один и тот же формат - HL7 en(точка) википедия (точка)org/wiki/Health_Level_7). HL7 следует формату обмена сообщениями MLLP, где каждое сообщение начинается с кода начального блока (0x0B), и каждый сегмент в сообщении заканчивается кодом возврата каретки (0x0D), а каждое сообщение заканчивается кодом конечного блока (0x1C), за которым следует каретка Код возврата (0x0D). Как только я получаю запрос, у меня есть класс бизнес-логики, который анализирует значения, вызывает веб-сервис, получает данные и создает ответ tcp. Что я хотел бы знать, так это то, где в SuperSocket я могу иметь метод или прослушиватель событий для чтения буфера и выполнения моей бизнес-логики и возврата ответа для того же сеанса. Я знаю, что в SuperSocket есть такие понятия, как фильтры и команды, но я не смог их выяснить. Любая помощь с благодарностью. Дайте мне знать, если вам нужны дополнительные детали.

0 ответов

Другие вопросы по тегам