...
|
...
|
@@ -23,6 +23,8 @@ class ProxyService |
|
|
return $msg;
|
|
|
}
|
|
|
|
|
|
public $eof = "\r:smtp:\r";
|
|
|
|
|
|
/**
|
|
|
* @author:dc
|
|
|
* @time 2025/3/29 14:34
|
...
|
...
|
@@ -36,7 +38,9 @@ class ProxyService |
|
|
SWOOLE_SOCK_TCP//|SWOOLE_SSL
|
|
|
);
|
|
|
$server->set([
|
|
|
'dispatch_mode' => 2 // 固定模式
|
|
|
'dispatch_mode' => 2, // 固定模式
|
|
|
'open_eof_split' => true,
|
|
|
'package_eof' => $this->eof,
|
|
|
]);
|
|
|
//监听连接进入事件。
|
|
|
$server->on('Connect', function ($server, $fd) {
|
...
|
...
|
@@ -46,29 +50,36 @@ class ProxyService |
|
|
|
|
|
//监听数据接收事件。
|
|
|
$server->on('Receive', function (Swoole\Server $server, $fd, $reactor_id, $data) {
|
|
|
// 替换掉自定义的结束符号
|
|
|
$data = str_replace($this->eof,'',$data);
|
|
|
// echo "in ".rand(10,99)." > ".$data;
|
|
|
// $ridfid = $reactor_id.'_'.$fd;
|
|
|
if(empty($this->clients[$fd])){
|
|
|
$this->clients[$fd] = new SmtpClient();
|
|
|
}
|
|
|
|
|
|
$client = $this->clients[$fd];
|
|
|
// 加锁
|
|
|
$client->lock();
|
|
|
// 处理数据
|
|
|
$result = $client->exec($data);
|
|
|
// 解锁
|
|
|
$client->unlock();
|
|
|
// 返回结果
|
|
|
$server->send($fd, $this->push($result[1]));
|
|
|
// 是否关闭连接
|
|
|
if($result[0]===false){
|
|
|
// 关闭并释放资源
|
|
|
$client->close();
|
|
|
$this->clients[$fd] = null;
|
|
|
unset($this->clients[$fd]);
|
|
|
|
|
|
$server->close($fd,true);
|
|
|
try {
|
|
|
// $client = $this->clients[$fd];
|
|
|
// 加锁
|
|
|
$this->clients[$fd]->lock();
|
|
|
// 处理数据
|
|
|
$result = $this->clients[$fd]->exec($data);
|
|
|
// 解锁
|
|
|
$this->clients[$fd]->unlock();
|
|
|
// 返回结果
|
|
|
$server->send($fd, $this->push($result[1]));
|
|
|
// 是否关闭连接
|
|
|
if($result[0]===false){
|
|
|
// 关闭并释放资源
|
|
|
$this->clients[$fd]->close();
|
|
|
$this->clients[$fd] = null;
|
|
|
unset($this->clients[$fd]);
|
|
|
|
|
|
$server->close($fd,true);
|
|
|
}
|
|
|
|
|
|
}catch (Throwable $e){
|
|
|
echo $e->getMessage()."\n";
|
|
|
}
|
|
|
});
|
|
|
|
...
|
...
|
|