server.h 1.6 KB
Newer Older
羽飞's avatar
羽飞 已提交
1
/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
羽飞's avatar
羽飞 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14
miniob is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
         http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details. */

//
// Created by Longda on 2021/4/1.
//

羽飞's avatar
羽飞 已提交
15
#pragma once
羽飞's avatar
羽飞 已提交
16 17 18 19 20 21

#include "common/defs.h"
#include "common/metrics/metrics.h"
#include "common/seda/stage.h"
#include "net/server_param.h"

羽飞's avatar
羽飞 已提交
22 23
class Communicator;

羽飞's avatar
羽飞 已提交
24 25 26 27 28 29 30
class Server {
public:
  Server(ServerParam input_server_param);
  ~Server();

public:
  static void init();
羽飞's avatar
羽飞 已提交
31 32
  // static int send(ConnectionContext *client, const char *buf, int data_len);
  static void close_connection(Communicator *comm);
羽飞's avatar
羽飞 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

public:
  int serve();
  void shutdown();

private:
  static void accept(int fd, short ev, void *arg);
  // close connection
  static void recv(int fd, short ev, void *arg);

private:
  int set_non_block(int fd);
  int start();
  int start_tcp_server();
  int start_unix_socket_server();

private:
  bool started_;

  int server_socket_;
  struct event_base *event_base_;
  struct event *listen_ev_;

  ServerParam server_param_;

羽飞's avatar
羽飞 已提交
58 59
  CommunicatorFactory communicator_factory_;

羽飞's avatar
羽飞 已提交
60 61 62 63
  static common::Stage *session_stage_;
  static common::SimpleTimer *read_socket_metric_;
  static common::SimpleTimer *write_socket_metric_;
};