日记24.12.14


一、webserver

这两天没这么写webserver,所以就今天晚上写了一点,主要是完善一下前面的内容。

首先是完成了时间戳的编写(名字的英文貌似搞错了),还是比较简单,但是还是写了一会,因为主要不是很清楚应用场景,具体实现的时候不知道哪些函数是必要的,因为作者的实现相对较全面,而仿写的时候不用全部实现,就要挑一些必要的功能实现。话不多说直接代码

Timestmp.h

namespace MW {
class Timestmp {
public:
  using sec_t = int64_t;
  static constexpr sec_t _microSecondsPerSecond = 1000 * 1000;
  static Timestmp now();

public:
  explicit Timestmp(sec_t microSecondsEpoch) {
    _microSecondsSinceEpoch = microSecondsEpoch;
  }
  sec_t microSecondsSinceEpoch() const { return _microSecondsSinceEpoch; }
  sec_t secondsSinceEpoch() const {
    return _microSecondsSinceEpoch / _microSecondsPerSecond;
  }
  sec_t microSecondsModSecond() const {
    return _microSecondsSinceEpoch & _microSecondsPerSecond;
  }
  bool valid() const { return _microSecondsSinceEpoch > 0; }
  std::string toString() const;
  std::string toFormattedString(bool mircroShow = false) const;
  Timestmp addTime(double seconds) {
    _microSecondsSinceEpoch +=
        static_cast<sec_t>(seconds * _microSecondsPerSecond);
    return *this;
  }

private:
  sec_t _microSecondsSinceEpoch;
};

inline bool operator<(const Timestmp &lhs, const Timestmp &rhs) {
  return lhs.microSecondsSinceEpoch() < rhs.microSecondsSinceEpoch();
}
inline bool operator>(const Timestmp &lhs, const Timestmp &rhs) {
  return lhs.microSecondsSinceEpoch() > rhs.microSecondsSinceEpoch();
}
inline bool operator==(const Timestmp &lhs, const Timestmp &rhs) {
  return lhs.microSecondsSinceEpoch() == rhs.microSecondsSinceEpoch();
}
inline bool operator!=(const Timestmp &lhs, const Timestmp &rhs) {
  return lhs.microSecondsSinceEpoch() != rhs.microSecondsSinceEpoch();
}
} // namespace MW

Timestmp.cc

#include "Timestmp.h"
#include <cstdio>
#include <inttypes.h>
#include <sys/time.h>
#include <time.h>
namespace MW {

Timestmp Timestmp::now() {
  struct timeval tv;
  gettimeofday(&tv, NULL);
  return Timestmp(
      static_cast<sec_t>(tv.tv_sec * _microSecondsPerSecond + tv.tv_usec));
}

std::string Timestmp::toString() const {
  char buf[32] = {0};
  sec_t seconds = _microSecondsSinceEpoch / _microSecondsPerSecond;
  sec_t microSeconds = _microSecondsSinceEpoch % _microSecondsPerSecond;
  snprintf(buf, sizeof(buf),
           "%" PRId64 "d"
           ".%06" PRId64 "d",
           seconds, microSeconds);
  return buf;
}

std::string Timestmp::toFormattedString(bool microShow) const {
  char buf[64] = {0};
  time_t seconds =
      static_cast<time_t>(_microSecondsSinceEpoch / _microSecondsPerSecond);
  struct tm tm_time;
  gmtime_r(&seconds, &tm_time);

  if (microShow) {
    int microSeconds =
        static_cast<int>(_microSecondsSinceEpoch / _microSecondsPerSecond);
    snprintf(buf, sizeof(buf), "%4d%02d%02d %02d:%02d%02d.%06d",
             tm_time.tm_year + 1900, tm_time.tm_mon + 1, tm_time.tm_mday,
             tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec, microSeconds);
  } else {
    snprintf(buf, sizeof(buf), "%4d%02d%02d %02d:%02d:%02d",
             tm_time.tm_year + 1900, tm_time.tm_mon + 1, tm_time.tm_mday,
             tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec);
  }
  return buf;
}
// namespace net
} // namespace MW

然后就是把日志系统改了一下,因为之前没实现时间戳,日志系统用到时间戳的时候都是其它方法替代的。然后就是改了一下各个文件的命名空间,不是很难,纯苦力活。但是日志系统Bug没有修,因为大概率是日志流那里我偷懒了,找时间改一下就行。

后面去看了一下channel类、EpoolPooler、EventLoop、tcpconncetin,没有完全看完,但是整体实现逻辑看懂了,今天就只实现了部分框架内容,明天会继续去实现。实现的时候发现了神奇的事情,就是weak_ptr< void>居然可以指向所有类型,惊了(学艺不精呀)。

二、网页设计

今天早上看了一下html、css,学了一下侧面导航栏,其它没有学什么了,本来想学继续一下flask的,但是没什么时间了,下午考六级,晚上写server。

本来想找tp妹妹谈一下网页设计需求的,但是tp妹妹太忙了,就算了。

三、学校

惬意的周末,顺手裸考六级,不得不说东边的风景真美,骑车在绝望心情舒畅,绝望坡的路延伸到青山脚下,山顶的北面有座塔。

这张是考完六级在东九拍的
在这里插入图片描述
六级好难,听力不懂,填单词认不到单词,难受~~~ 作文乱写,翻译乱写
希望能过吧。

晚上很冷,但是还是坚持跑步了,给自律的自己点赞(今天英语作文就是self-discipline真巧)

睡了bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值