Esempio n. 1
0
func (s *Server) Accept(conn *net.TCPConn) {
	defer func() {
		if err := recover(); err != nil {
		}
	}()
	fmt.Println("客户端连接来自:", conn.RemoteAddr().String())
	bs := make([]byte, 1024)
	var msg_tmp msg.OSMsg
	var login_user string
	once := sync.Once{}
	for {
		n, err := conn.Read(bs)
		if checkerr(err) {
			break
		}
		err = proto.Unmarshal(bs[:n], &msg_tmp)
		if checkerr(err) {
			continue
		}
		once.Do(func() {
			login_user = msg_tmp.GetFromu()
			err := s.keeper.Login(login_user, conn)
			if checkerr(err) {
				panic(err)
			}
		})
		err = s.keeper.SendMsgTo(msg_tmp.GetTou(), bs[:n])
		if checkerr(err) {
			continue
		}
		msg_tmp.Reset()
	}
	defer func() {
		s.keeper.Logout(login_user)
	}()

}