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

OSCHINA-MIRROR/yswenli-SAEA

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

SAEA.Socket

SAEA.Socket — это высокопроизводительный сетевой фреймворк на основе IOCP, который базируется на стандарте dotnet 2.0. В исходном коде (SRC) описаны сценарии использования, такие как:

  • передача больших файлов;
  • клиент и сервер WebSocket;
  • высокопроизводительные очереди сообщений;
  • RPC;
  • драйвер Redis;
  • HTTP-сервер;
  • MQTT;
  • MVC;
  • DNS;
  • сервер сообщений и др.

QQ группа: 788260487

IOCP
FileTransfer
FTP
MessageSocket
QueueSocket
MVC
RPC
Websocket
RedisDrive
MQTT
DNS

Компоненты для использования

Компоненты можно найти в NuGet или ввести команду:

Install-Package SAEA.Sockets -Version 6.0.0.2

URL NuGet: https://www.nuget.org/packages?q=saea

Пример

SAEA.Sockets для пользовательского протокола

Протокол JT808

Тестовый проект — SAEA. Sockets Test, демонстрирует, как расширить IContext, IUnpacker для декодирования и кодирования, чтобы получить доступ к SAEA. Sockets с использованием трёхстороннего протокола (JT808).

Передача файлов

Использование saea.filesocket

var fileTransfer = new FileTransfer(filePath);
fileTransfer.OnReceiveEnd += _fileTransfer_OnReceiveEnd;
fileTransfer.OnDisplay += _fileTransfer_OnDisplay;
fileTransfer.Start();
//send file
fileTransfer.SendFile(string fileName, string ip)

FTP

saea.ftp использование

saea.ftpclient

var client = new FTPClient(ip, port, username, pwd);
client.Ondisconnected += _client_Ondisconnected;
client.Connect();
var path = client.CurrentDir();
client.Upload(filePath, (o, c) =>
{
    size = c;
    _loadingUserControl.Message = $"正在上传文件:{fileName},{(o * 100 / c)}%";
});
client.Download(fileName, Path.Combine(filePath, fileName), (o, c) =>
{
    _loadingUserControl.Message = $"正在下载文件:{fileName}{(o * 100 / c)}%";
});

saea.ftpserver


_serverConfig.IP = ip;
_serverConfig.Port = port;
FTPServerConfigManager.Save();

var ftpServer = new FTPServer(_serverConfig.IP, _serverConfig.Port, _serverConfig.BufferSize);
ftpServer.OnLog += _ftpServer_OnLog;
ftpServer.Start();

QueueTest

saea.queue server использование

var server = new QServer();
server.Start();

saea.queue producer использование

var ipPort = "127.0.0.1:39654";
QClient producer = new QClient("productor_" + Guid.NewGuid().ToString("N"), ipPort);
producer.OnError += Producer_OnError;
producer.OnDisconnected += Client_OnDisconnected;
producer.Connect();
producer.Publish(topic, msg);

saea.queue consumer использование

var ipPort = "127.0.0.1:39654";
QClient consumer = new QClient("subscriber_" + Guid.NewGuid().ToString("N"), ipPort);
consumer.OnMessage += Subscriber_OnMessage;
consumer.OnDisconnected += Client_OnDisconnected;
consumer.Connect();
consumer.Subscribe(topic);

WebSocket

wsserver использование

WSServer server = new WSServer();
server.OnMessage += Server_OnMessage;
server.Start();

private static void Server_OnMessage(string id, WSProtocal data)
{
    Console.WriteLine("WSServer 收到{0}的消息:{1}", ConsoleColor.Green, id, Encoding.UTF8.GetString(data.Content));
    server.Reply(id, data);
}

wsclient использование

WSClient client = new WSClient();
client.OnPong += Client_OnPong;
client.OnMessage += Client_OnMessage;
client.OnError += Client_OnError;
client.OnDisconnected += Client_OnDisconnected;
client.Connect();
client.Send("hello world!");
client.Ping();
client.Close();

RedisTest

https://github.com/yswenli/WebRedisManager

saea.redis использование

 var cnnStr =

``` **Сервер = 127.0.0.1:6379; passwords = yswenli**

RedisClient redisClient = new RedisClient(cnnStr);
redisClient.Connect();
redisClient.GetDataBase(1).Set("key", "val");
var val = redisClient.GetDataBase().Get("key");

**SAEA.MVC**

<a href="https://github.com/yswenli/SAEA.Rested" target="_blank">https://github.com/yswenli/SAEA.Rested</a>

**Инициализация использования saea.mvc**

```csharp

var mvcConfig = SAEAMvcApplicationConfigBuilder.Read();
SAEAMvcApplication mvcApplication = new SAEAMvcApplication(mvcConfig);
// Установка дефолтного контроллера
mvcApplication.SetDefault("home", "index");
mvcApplication.SetDefault("index.html");
// Ограничение
mvcApplication.SetForbiddenAccessList("/content/");
mvcApplication.SetForbiddenAccessList(".jpg");

mvcApplication.Start();

Использование контроллера saea.mvc

[LogAtrribute]
public class HomeController : Controller
{          
    [Log2Atrribute]
    [HttpGet]
    [HttpPost]
    public ActionResult Index()
    {
        return Content("Hello,I'm SAEA.MVC!你好!");
    }
    
    public ActionResult Show()
    {
        var response = HttpContext.Response;
        response.ContentType = "text/html; charset=utf-8";
        response.Write("<h3>测试一下那个response对象使用情况!</h3>");
        // Текст сообщения о происшествии во Франции
        response.End();
        return Empty();
    }
    
    public ActionResult GetModels(string version, BasePamars basePamars, PagedPamars pagedPamars)
    {
        return Content($"version:{version}  basePamars:{Serialize(basePamars)}  pagedPamars:{Serialize(pagedPamars)}");
    }   
    
    public ActionResult Download()
    {
        return File(HttpContext.Server.MapPath("/Content/Image/c984b2fb80aeca7b15eda8c004f2e0d4.jpg"));
    }

    [HttpPost]
    public ActionResult Upload(string name)
    {
        var postFiles = HttpContext.Request.PostFiles;
        return Content($"ok!name:{name}");
    }
}

SAEA.RPC

Использование сервиса saea.rpc

var sp = new ServiceProvider();
sp.OnErr += Sp_OnErr;
sp.Start();

[RPCService]
public class HelloService
{
    public string Hello()
    {
        return "saea.rpc hello!"
    }
}

Использование клиента saea.rpc

var url = "rpc://127.0.0.1:39654";
RPCServiceProxy cp = new RPCServiceProxy(url);
cp.OnErr += Cp_OnErr;
cp.HelloService.Hello();

SAEA.Message

Использование сервера saea.message

MessageServer server = new MessageServer(1024, 1000 * 1000, 30 * 60 * 1000);

server.OnDisconnected += Server_OnDisconnected;

server.Start();

Использование клиента saea.message

var cc1 = new MessageClient();
cc1.OnPrivateMessage += Client_OnPrivateMessage;
cc1.Connect();

// Отправка личного сообщения
cc1.SendPrivateMsg(cc2.UserToken.ID, "Ты хорошо, cc2!");

// Подписка
cc1.Subscribe(channelName);

// Отправка сообщения в канал
cc1.SendChannelMsg(channelName, "hello!");

// Создание группы
cc1.SendCreateGroup(groupName);

// Добавление в группу
cc2.SendAddMember(groupName);


// Отправка группового сообщения
cc1.SendGroupMessage(groupName, "Групповой лидер объявил!");

// Выход из группы
cc2.SendRemoveGroup(groupName);

SAEA.MQTT

Использование сервера saea.mqtt

var serverOptions = new MqttServerOptionsBuilder().Build();

server.ApplicationMessageReceived += Server_ApplicationMessageReceived;

await server.StartAsync(serverOptions)

private static void Server_ApplicationMessageReceived(object sender, MQTT.Event.MqttMessageReceivedEventArgs e)
{
    Console.ForegroundColor = ConsoleColor.DarkGreen;

    Console.WriteLine($"Сервер получил сообщение, ClientId:{e.ClientId}, {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
}

Использование клиента saea.mqtt

var client = factory.CreateMqttClient();

var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1").Build();

client.ApplicationMessageReceived += Client_ApplicationMessageReceived;

await client.ConnectAsync(clientOptions);

client.SubscribeAsync("test/topic").GetAwaiter().GetResult();

client.PublishAsync("test/topic",
``` ```
"hello").GetAwaiter().GetResult();

private static void Client_ApplicationMessageReceived(object sender, MQTT.Event.MqttMessageReceivedEventArgs e)
{
    Console.ForegroundColor = ConsoleColor.Red;
    
    Console.WriteLine($"client:{e.ClientId}收到消息:{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
}

Скриншот экземпляра










Дополнительно

WebRedisManager — это ещё один инструмент управления Redis, основанный на этом. Подробнее см.: https://www.cnblogs.com/yswenli/p/9460527.html. Исходный код Git: https://github.com/yswenli/WebRedisManager.

GFF — программа для обмена сообщениями, похожая на QQ, также основана на этом проекте. Подробнее см.: https://github.com/yswenli/GFF.

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

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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