SAEA.Socket
SAEA.Socket — это высокопроизводительный сетевой фреймворк на основе IOCP, который базируется на стандарте dotnet 2.0. В исходном коде (SRC) описаны сценарии использования, такие как:
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 Test, демонстрирует, как расширить IContext, IUnpacker для декодирования и кодирования, чтобы получить доступ к SAEA. Sockets с использованием трёхстороннего протокола (JT808).
var fileTransfer = new FileTransfer(filePath);
fileTransfer.OnReceiveEnd += _fileTransfer_OnReceiveEnd;
fileTransfer.OnDisplay += _fileTransfer_OnDisplay;
fileTransfer.Start();
//send file
fileTransfer.SendFile(string fileName, string ip)
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)}%";
});
_serverConfig.IP = ip;
_serverConfig.Port = port;
FTPServerConfigManager.Save();
var ftpServer = new FTPServer(_serverConfig.IP, _serverConfig.Port, _serverConfig.BufferSize);
ftpServer.OnLog += _ftpServer_OnLog;
ftpServer.Start();
var server = new QServer();
server.Start();
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);
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);
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 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();
https://github.com/yswenli/WebRedisManager
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 )