Esempio n. 1
0
func SendFile(conn interface{}, msg *protocol.WMessage) {

	//判断接收方是否在线
	if !OnlineCheck(msg.SendMsg.GetReceiver()) {
		common.CommonResultReturn(conn, "fileResult", msg.GetMsgTypeId(), 1)
		return
	}

	FileMark = msg.GetMsgTypeId()
	//是否同意接收文件
	now := time.Now().Unix()
	msg.SendMsg.MsgTime = &now
	if FileSytle == 0 && int32(msg.SendMsg.GetType()) == 2 {
		fileType := "fileResult"
		msg.MsgType = &fileType
		buffer, err := proto.Marshal(msg)
		if err != nil {
			common.CommonResultReturn(conn, "fileResult", FileMark, 2)
			Logger.Error("sendfile:", err)
			return
		}
		newbuffer := append(common.IntToBytes(len(buffer)), buffer...)
		switch (UserMap[msg.SendMsg.GetReceiver()]).(type) {
		case net.Conn:
			_, err = (UserMap[msg.SendMsg.GetReceiver()]).(net.Conn).Write(newbuffer)
			common.CheckErr(err)
		case websocket.Conn:
			_, err = (UserMap[msg.SendMsg.GetReceiver()]).(*websocket.Conn).Write(newbuffer)
			common.CheckErr(err)
		}
		return
	}

	// if FileSytle == 2 {
	// 	//接收文件名
	// 	fd, err := os.OpenFile("./uploads/"+msg.UserInfo.GetUsername()+"/"+msg.SendMsg.GetMsg(), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
	// 	if err != nil {
	// 		common.CommonResultReturn(conn, "fileResult", msg.GetMsgTypeId(), 2)
	// 		Logger.Error("send file", err.Error())
	// 		return
	// 	}
	// 	defer fd.Close()

	// 	//写文件
	// 	_, err = fd.Write(msg.SendMsg.GetFile())
	//给接收方发送文件内容
	buffer, err := proto.Marshal(msg)
	if err != nil {
		common.CommonResultReturn(conn, "fileResult", msg.GetMsgTypeId(), 3)
		Logger.Warn("protobuf marshal failed: ", err)
		return
	}
	newbuffer := append(common.IntToBytes(len(buffer)), buffer...)
	switch (UserMap[msg.SendMsg.GetReceiver()]).(type) {
	case net.Conn:
		_, err = (UserMap[msg.SendMsg.GetReceiver()]).(net.Conn).Write(newbuffer)
		common.CheckErr(err)
	case websocket.Conn:
		_, err = (UserMap[msg.SendMsg.GetReceiver()]).(*websocket.Conn).Write(newbuffer)
		common.CheckErr(err)
	}
}