1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/moonty-Socket4Net

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

socket4net

Библиотека асинхронных сокетов на C#.

  • простое использование
  • многоплатформенная (.NET/Mono)
  • эффективная

Установка socket4net

Для установки socket4net выполните следующую команду в консоли управления пакетами

PM > Install-Package socket4net

Требования

protobuf-net## Начало работы

Сервер

    // запуск лаунчера
    var launcher = Obj.New<Launcher>(LauncherArg.Default, true);
    // запуск сервера
    var server = Obj.New<Server<ChatSession>>(new ServerArg(null, "127.0.0.1", 9527), true);
    // остановка сервера
    server.Destroy();
    // остановка лаунчера
    launcher.Destroy();

Клиент

клиент такой же как и сервер

Обработка сообщений

Все сообщения распределяются в DispatchableSession, который имеет два абстрактных метода:

        public abstract Task<NetResult> HandleRequest(IDataProtocol rq);
        public abstract Task<bool> HandlePush(IDataProtocol ps);

Необходимо реализовать эти методы в вашем собственном сессионном объекте. например:

    // для .net45
    public class ChatSession : DispatchableSession
    {
        public override Task<bool> HandlePush(IDataProtocol ps)
        {
            var more = ps as DefaultDataProtocol;
            // выполнение вашего собственного обработчика
            return Task.FromResult(true);
        }

        public override Task<NetResult> HandleRequest(IDataProtocol rq)
        {
            var more = ps as DefaultDataProtocol;
            // выполнение вашего собственного обработчика
            return Task.FromResult(NetResult.Success);
        }
    }

    // для .net35
    public class ChatSession : DispatchableSession
    {
        public override void HandlePush(IDataProtocol ps, Action<bool> cb)
        {
            var more = ps as DefaultDataProtocol;
            // выполнение вашего собственного обработчика
            var result = true; /* ваш собственный результат обработки */
            cb(result);
        }

        public override void HandleRequest(IDataProtocol rq, Action<NetResult> cb)
        {
            var more = ps as DefaultDataProtocol;
            // выполнение вашего собственного обработчика
            var result = NetResult.Success;
            cb(result);
        }
    }
```Успех/* ваш собственный результат обработки */;
             cb(результат);
         }
     }
 ```#### API запроса/推送
Запрос означает, что нам требуется получить ответ от удаленного узла, тогда как推送 просто сообщает удаленному узлу о произошедшем событии, не требуя ответа.<br>Таким образом, при выполнении запроса API используется обратный вызов, предоставленный (.NET 3.5) или асинхронный возврат типа `Task<NetResult>` (.NET 4.5). Обратный вызов или `Task<NetResult>` информируют отправителя о том, успешно ли выполнен запрос.

```C#
      // многопоточная передача
      void MultiCast<T>(T proto, IEnumerable<ISession> sessions) where T : IDataProtocol;
      void Broadcast<T>(T proto) where T : IDataProtocol;

      // запрос
      Task<NetResult> RequestAsync<T>(T proto) where T : IDataProtocol;
      void RequestAsync<T>(T proto, Action<bool, byte[]> cb) where T : IDataProtocol;

      //推送
      void Push<T>(T proto) where T : IDataProtocol;

Каждый протокол является экземпляром ProtoContact из библиотеки protobuf-net, может быть также DefaultDataProtocol из socket4net или любым пользовательским протоколом, реализующим интерфейс IDataProtocol.

Например, стандартный протокол данных socket4net:

    [ProtoContract]
    public class DefaultDataProtocol : IDataProtocol
    {
        [ProtoMember(1)]
        public short Ops { get; set; }
        [ProtoMember(2)]
        public byte[] Data { get; set; }
    }

Безопасность

По умолчанию, socket4net не шифрует ваши преобразованные данные, но вы можете изменить это, предоставив пару методов шифрования/дешифрования в методе OnInit вашего пользовательского сессионного объекта.

Например:

    var key = Encoding.Default.GetBytes("12345678");
    var des = DES.Create();

    var encryptor = des.CreateEncryptor(key, key);
    Encoder = bytes => encryptor.TransformFinalBlock(bytes, 0, bytes.Length);
```    var decryptor = des.CreateDecryptor(key, key);
    Decoder = bytes => decryptor.TransformFinalBlock(bytes, 0, bytes.Length);

Вопрос

Группа QQ: http://jq.qq.com/?_wv=1027&k=VptNja
Электронная почта: lizs4ever@163.com

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

An efficient and easy socket framework for C# Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/moonty-Socket4Net.git
git@api.gitlife.ru:oschina-mirror/moonty-Socket4Net.git
oschina-mirror
moonty-Socket4Net
moonty-Socket4Net
master